代理,顾名思义就是通过中间代理服务器去完成客户端和服务器端的通信,因为某些资源无法直接通过客户端从服务器端请求得到,如国内访问谷歌资源,就需要用代理服务器,将国内ip转换为国外ip,然后去访问资源。
Nginx 作为代理服务可以实现很多的协议代理, 主要以 http 代理为主
正向代理是相对于客户端而言,如客户端无法直接访问服务器的某个资源,而某个代理服务器可以访问该资源,则客户端可以通过该代理服务器去访问该资源。 举个例子: A:客户端(租客) B:服务端(房主) C:代理(房屋出租中介) A想租B的房子,但是B的房子只能通过中介C才能出租,这时候A联系C的活被B揽下来了,B去联系C租到了房子。这个过程中,A、B并没有联系,B只知道把房子交给了C,但是A知道房子是通过中介C从B哪里取到的。
上图显示,服务端的图片资源只能通过69网段请求得到,Nginx配置如下:
//nginx.conf
如果你的nginx.conf的http下用include包含了同目录下的所有conf文件,则可以单独写一个zx_proxy.conf,否则可以直接写在nginx.conf文件中,内容如下: //nginx.conf或者zx_proxy.conf
客户端使⽤用SwitchySharp浏览器器插件配置正向代理理,IP在69网段中(192.168.69.0/24)。 此时就可以在客户端浏览器访问到192.168.69.113下的图片资源,打开192.168.69.113主机上Nginx的access.log日志文件,可以发现remote_addr的值为192.168.69.112,也就是代理服务器的IP,http_x_forwarded_for值为192.168.160.1。 也就是说客户端只管在浏览器上输入http://192.168.69.113/xx.jgp,浏览器自动会通过配置好的代理IP去访问目标浏览器上的资源。
反向代理是相对服务端而言,对客户端时无感知的,无需再客户端做任何配置,只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。 举个例子: A:客户端(租客) B:服务端(房主) C:代理(房屋出租中介) A去找C租房子,C找到B拿到钥匙后给了A,就把房子租给了A。但是这个过程A并不知道B才是真正的房东,他可能认为房东就是C。 比如我访问csdn中的一篇博客https://blog.csdn.net/IT_10/article/details/89365436,现在我想通过我的192.168.69.113域名去访问这篇博客,即https://192.168.69.113/IT_10/article/details/89365436也能访问到这篇博客,Nginx中的具体配置如下: