默认后端服务器只能看到是前端nginx调度器访问的本机
针对前端只有单个代理服务器的解决办法
一、修改调度机nginx的虚拟主机的配置文件
设定转发往后端主机的请求报文的请求首部的值;
1 | vim /etc/nginx/conf .d /test .conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | server { listen 80; server_name www. test .net; root /data/site1/ ; location ~.*.(jpg|png|jpeg)$ { proxy_pass http: //192 .168.1.4; } location /api { proxy_set_header X-Real-IP $remote_addr; proxy_pass http: //192 .168.1.6; } access_log /var/log/nginx/test_net .log ; } |
nginx 对别人发给它的文件没办法修改,但对他发送给别人的文件可以修改,这里在头部添加一个X-Real-IP
默认日志里记录的是访问本机的客户端IP地址,X-Real-IP这个字段可以自定义
二、重启nginx服务器
1 2 3 4 | systemctl restart nginx 或者 nginx -s stop nginx |
三、修改后端主机的主配置文件
1 | vim /etc/httpd/conf/httpd .conf |
默认记录的开头是客户端IP地址:(英文输入法下,输入/LogFormat 直接定位到这行)
1 | LogFormat "%h %l %u %t " %r " %>s %b " %{Referer}i " " %{User-Agent}i "" combined |
将原来的注释掉,修改为:
1 | LogFormat <strong>"</strong><strong>"%{X-Real-IP}i"</strong> %h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined |
四、测试访问
1 | curl www. test .net /api -L |
五、查看后端日志
1 2 | "192.168.1.4" 192.168.1.5 - - [08/Jun/2021:11:47:23 +0800] "GET /api HTTP/1.0" 301 231 "-" "curl/7.29.0" "192.168.1.4" 192.168.1.5 - - [08/Jun/2021:11:47:23 +0800] "GET /api/ HTTP/1.0" 200 31 "-" "curl/7.29.0" |
192.168.1.4 是测试服务器地址,192.168.1.5是nginx调度器地址。
到此这篇关于nginx实现IP地址透传的示例代码的文章就介绍到这了,更多相关nginx IP地址透传内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!