宁可枝头抱香死,何曾吹落北风中。这篇文章主要讲述Nginx实现反向代理客户端IP透传相关的知识,希望能为你提供帮助。
在前面的实验中,我们了解到nginx可以作实现反向代理功能,不过默认情况下,客户端通过Nginx服务器访问后端web服务器后,后端服务器查看IP来源时只能显示Nginx服务器IP,而不是显示客户端的真实IP。利用IP透传,则可以在后端web服务器上查看到真实的客户端IP。
- 反向代理功能实现
1.1 安装服务
web服务器下载并启动httpd服务,同时将web主页修改为“hello world”。
Nginx服务器部分,笔者继续使用之前实验时编译安装的Nginx1.18,并将IP绑定到www.johnnyfang.com这个域名上,此时客户端直接访问Nginx服务器时只会显示Nginx代理服务器的web主页内容。
1.2 修改配置文件
Nginx服务器在配置文件中添加代理转发服务器的信息,此时客户端再去访问Nginx服务器,显示的已经不是Nginx服务器自身web主页内容,而是后端web-server服务器的主页内容。
1.3 查看IP来源
后端web服务器查看/var/log/httpd/access_log日志文件时,显示的IP只有10.0.0.152,即来自Nginx服务器,而没显示真实的客户端IP10.0.0.151。
- 实现客户端IP透传
2.1 一级代理实现客户端IP透传
2.1.1 利用$remote_addr实现IP透传
2.1.1.1 修改配置文件
proxy_set_header可更改或添加客户端的请求头部信息内容并转发至后端服务器,比如在后端服务器想要获取客户端的真实IP的时候,就要更改每一个报文的头部,Nginx服务自带了识别源地址的变量$remote_addr,加上该变量,不同IP通过Nginx服务器转发至后端web服务器时,均能在后端服务器查看到源地址,同时我们需要对设置取个别名,名称可自定义,不过官方有专门的的名称为X-Real-IP。
后端web服务器在配置文件的LogFormat部分添加与Nginx服务器中相同的名称作为日志记录的头部信息,具体如下图,并重启服务。
2.1.1.2 测试环节
此时客户端通过Nginx代理服务器去访问后端web服务时,后端web服务器查看日志,可看到访问是由源地址为10.0.0.151的客户端发起,从而实现了IP透传。
2.1.2 利用$proxy_add_x_forwarded_for实现IP透传
2.1.2.1 修改配置文件
除了上面讲的利用$remote_addr这一变量来进行一级代理的客户端IP透传,还可以用到Nginx服务自带的另一个变量$proxy_add_x_forwarded_for,它同样可以实现该功能。例如在Nginx服务器配置文件中添加如下图所示内容,同时修改后端web服务器配置文件中的对应名称。
2.1.2.2 测试环节
此时客户端通过Nginx服务器访问后端web服务器,在web服务器上查看日志时,同样能显示客户端的源地址。
2.2 多级代理实现客户端IP透传
在上面使用的两个变量中,$proxy_add_x_forwarded_for还能在多级代理中实现客户端IP透传。例如笔者这边再增加一台IP为10.0.0.155的虚拟机作为第二个代理服务器,取名nginx-server2,希望做到客户端访问nginx-server代理服务器,由nginx-server服务器转发给nginx-server2服务器,再由nginx-server2服务器转发给后端web服务器,同时web服务器查看web服务访问日志时,能看到所有的IP来源。
2.2.1 修改配置文件
由于多加了一台代理服务器,nginx-server需在配置文件中将proxy_pass指向第二台代理服务器的IP。
第二台代理服务器的Nginx笔者是直接通过yum安装,在配置文件/etc/nginx/nginx.conf的location部分添加如下图所示内容,nginx-server2是最后的一台代理服务器,故proxy_pass需指向提供web服务的主机IP。
2.2.2 测试环节
客户端访问nginx-server服务器时,会显示真正提供web服务的web-server网页内容。web-server查看日志时,能看到最终的访问请求来自nginx-server2,同时源地址为客户端的真实IP10.0.0.151,并且经过了IP为10.0.0.152的第一个代理服务器。
推荐阅读
- Nginx负载均衡中常见的算法及原理有哪些
- 利用LNMP实现wordpress站点搭建
- 运维小白成长记——第十七周
- CentOS Stream 9 安装与设置的有关技巧
- 2022 年最佳 15 款网络监控工具
- 浅谈JUC工具CountDownLatch
- 华为防火墙GRE隧道配置
- pxe+kickstart实现自动化安装系统
- 2022-05-11 Log4j 使用&Google-option使用