需求:通过请求 A 服务器 IP 端口可以转发访问到 B 服务器 IP 端口,B 服务器服务可以获取到真实客户端的 IP 地址。 实操:在 A 服务器上做 iptable NAT 转发 8088 端口到 B 服务器 8099 端口,用了以下命令
iptables -t nat -A PREROUTING -p tcp --dport 8088 -j DNAT --to-destination 183.3.203.119:8099;
iptables -t nat -A POSTROUTING -p tcp -d 183.3.203.119 --dport 8099 -j MASQUERADE -to-source 180.101.50.242;
问题:在 B 服务器的 Nginx 里面无法获取到真实的客户端 IP ,一直获取到的是 A 服务器的 IP ,如果想要获取真实客户端 IP ,iptable 这块规则该如何处理。
说明:Nginx 相关的获取客户端 IP 配置都加过了(没有效果,大概率判断问题不在 Nginx 这一侧):
server {
listen 80 default_server;
server_name _;
location / {
default_type text/html;
set_real_ip_from <NAT 服务器 IP>;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
# 使用$remote_addr 获取客户端真实 IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
content_by_lua_file /etc/nginx/print_ngx_var.lua;
}
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.