正向代理与反向代理的区别     

虽然正向代理和反向代理都涉及代理服务器接收客户端请求并向服务端转发请求,但它们之间存在一些关键的区别:

正向代理:

        在正向代理中,代理服务器代表客户端向服务器发送请求,并将服务器端响应返回给客户端。
客户端需要配置请求发送至代理服务器,并且服务器不会直接知道客户端的真实 IP 地址,只能看到代理服务器的 IP 地址。
正向代理通常用于绕过网络访问限制、保护客户端隐私、实现匿名访问等场景,例如访问被封锁的网站或保护内部网络安全访问外部网络,常见的有路由器、防火墙等。

反向代理:

        在反向代理中,代理服务器代表服务器接收客户端请求,并将请求转发给实际提供服务的服务器。代理服务器接收来自客户端的请求,并决定将请求转发给哪个后端服务器。
客户端只知道代理服务器的 IP 地址,不知道提供服务的真实服务器。
反向代理通常用于负载均衡、缓存加速、安全策略、SSL 终结等场景,可以提高网站的性能、可用性和安全性。
总的来说,正向代理是客户端选择性使用的代理服务器,而反向代理是提供服务的服务器端使用的代理服务器。区别主要在于代理服务器代表谁和谁向谁转发请求。

反向代理配置案例:

1、创建好一个访问页面

nginx的正向与反向代理_正向代理

2、、配置反向代理

nginx的正向与反向代理_网络_02

配置参数详解:

proxy_pass 表示真是服务器的IP地址,也就是web服务器的IP地址;

        proxy_set_header Host $http_host; 表示重新定义转发给web服务器的请求头部,即在请求头部添加客户端真实地址;
        proxy_set_header X-Real-IP $remote_addr; 表示记录客户端真实IP地址
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 表示记录服务端反向代理服务器的ip地址

        proxy_connect_timeout 表示反向代理服务器对web服务器发起TCP三次握手的连接超时时间; 
        proxy_send_timeout 表示web服务器给反向代理服务器返回资源过程中的超时时间
        proxy_read_timeout 表示TCP长连接的超时时间

        proxy_buffering 表示开启缓存功能
        proxy_buffer_size 表示存放响应头部的缓冲区
        proxy_buffers 表示内容缓冲区大小
        proxy_busy_buffers_size 表示用于向客户端发送资源的缓冲区,反向代理服务器会划分出一部分用于发送资源的缓冲区;
#       proxy_max_temp_file_size 256;表示用于存储请求头部的缓冲区,反向代理服务器会将超大的请求头部在缓冲区内存储成文件。

proxy_set_header 都是关于修改请求配置。而示例中的配置表示,反向代理服务器将自身ip地址与客户端的真实IP地址一同添加到请求头部,,再转发给web服务器。

注意:nginx配置反向代理服务器之后,nginx不在提供web功能。

测试:通过访问反向代理服务器IP来访问web网站。(注意我这里的方向代理IP应该是192.168.40.186的)

nginx的正向与反向代理_服务器_03

上图显示成功通过反向代理服务器IP访问web网站,说明反向代理配置已经生效。

        查看web服务器中的访问日志,IP地址192.168.40.188在访问日志中表示客户端的IP地址。在访问日志的结尾比平常多一个IP地址,这就是真实客户端的IP地址,说明IP地址192.168.40.188是一个代理服务器IP地址。之前所以客户端真实地址在访问日志中出现,是因为之前对请求头部信息的修改配置生效,nginx将代理ip地址与客户端的真实IP地址都写到了请求头部中。web服务器收到带有客户端的真实ip地址的请求信息,就将客户端的真实IP地址与代理IP地址一同写入访问日志。

nginx的正向与反向代理_反向代理_04