代理也称正向代理,是一个位于客户端和目标服务器之间的代理服务器,客户端将发送的请求和指定的目标服务器提交给代理服务器,然后代理服务器向目标服务器发起请求,并将获得的响应结果返回给客户端的过程。
相对于代理服务,反向代理对于客户端而言就是目标服务器,客户端向反向代理服务器发送请求后,反向代理服务器将该请求转发给内部网络上的后端服务器,并将从后端服务器上得到的响应结果返回给客户端。
代理和反向代理两者特性:
安全性:正向代理的客户端能够在隐藏自身信息的同时访问任意网站,这给网络安全带来了极大威胁,而反向代理的客户端只能通过外网来访问代理服务器,并不知道自己访问的是一个代理服务器,反向代理将真正的处理放在内网中,有效提供了网络安全;
功能性:正向代理的主要用途是为在防火墙内的局域网用户提供访问Internet的途径,而反向代理的主要用途是将防火墙后的服务器提供给Internet用户访问,还可以为多个后端服务器提供负载均衡功能和缓存功能等。
在Nginx服务器中,反向代理的配置非常简单,最主要的指令时:proxy_pass,用于设置后端服务器的地址,该地址中包括传输数据使用的协议,服务器主机名以及可选的URI资源等。
proxy_pass通常在location块中进行设置。
1、准备服务器
准备3台服务器,并且全部安装Nginx服务器。
2、配置反向代理
在其中一台服务器中配置两个不同的域名,用于请求时,将请求代理转发到指定服务器中,
例如:请求http://test.ng.test时,将请求代理到32服务器中。
具体配置如下(/usr/local/nginx/conf/nginx.conf):
请求http://test.web.com时,将请求代理到33服务器中。
在物理机hosts文件中配置两个 域名对应的IP地址
重启服务器,通过浏览器验证:
test.web.com
test.ng.test
Nginx中对于反向代理的设置还提供了其他辅助指令:
proxy_set_header:在将客户端请求发送给后端服务器之前,更改来自客户端的请求头信息;
proxy_connect_timeout:配置Nginx与后端代理服务器尝试建立连接的超时时间;
proxy_read_timeout:配置Nginx向后端服务器组发出read请求后,等待响应的超时时间;
proxy_send_timeout:配置Nginx向后端服务器组发出write请求后,等待响应的超时时间;
proxy_redirect:用于修改后端服务器返回的响应头中的Location和Refresh;
通过proxy_set_header指令的使用,配置实现将客户端IP传递给后端服务器:
location / {
proxy_pass http://192.168.44.33;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
$remote_addr:用于获取客户端真实的IP地址,
$proxy_add_x_forwarded_for:用于在客户端请求头字段后添加客户端地址,使用逗号分隔,且当不存在客户端请求头字段时,该变量等同于变量$remote_addr;
联系客服