Nginx IP 透传
一、简介
Nginx的IP地址透传是一个在网络传输中保留和传递源IP地址和目标IP地址的功能。IP透传,即IP透明传输,是指在网络传输过程中,源IP地址和目标IP地址能够完整地保留和传递,中间的网络设备(如代理服务器、负载均衡器等)不会修改这些IP地址。
二、应用场景
记录真实客户端IP地址的日志:在Nginx作为反向代理服务器时,默认情况下,后端服务器只能看到Nginx的IP地址,而无法看到客户端的真实IP地址。通过IP透传,后端服务器可以记录客户端的真实IP地址,便于日志分析和问题排查。
访问控制:在一些应用场景中,需要根据客户端的IP地址进行访问控制。通过IP透传,可以确保后端服务器能够获取到客户端的真实IP地址,从而进行准确的访问控制。
三、配置参数
server {listen 80;server_name example.com;location / {# 用于记录客户端的真实IP地址。proxy_set_header X-Real-IP $remote_addr;# 用于记录经过的代理服务器的IP地址列表,最左边的为客户端IP,右边为经过的代理服务器IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 用于记录原始请求的协议(http或https)proxy_set_header X-Forwarded-Proto $scheme;}
}
四、简单实践
1、角色分配
角色 | IP | 系统 |
---|---|---|
Client | 10.0.0.15 | Rocky9 |
Proxy Server | 10.0.0.114 | Ubuntu24 |
Real Server | 10.0.0.118 | openEuler |
2、未透传实践
默认情况下,后端真实服务器无法获取真实客户端IP
查看 Proxy Server 配置 /etc/nginx/conf.d/vhost.conf
修改后端 Real Server 配置 /etc/nginx/default.d/simple.conf
location / {return 200 "客户端:\${remote_addr}---真实ip: \${http_x_real_ip}----地址列
表:\${http_x_forwarded_for}\n";
}
重启 nginx 并查看效果,后端服务器只能获取代理服务器IP
3、透传配置
修改代理服务器配置 /etc/nginx/conf.d/vhost.conf ,透传真实客户端IP,location块增加 proxy_set_header X-Real-IP \$remote_addr; 及 proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
server {listen 80 default_server;server_name ubuntu.test.com;root /data/server/nginx/web1;location /static {rewrite ^/static(.*)\$ /index.html break; # 重写urlproxy_pass http://10.0.0.118;proxy_set_header Host "openEuler.test.com";# 将客户端IP追加请求报文中X-Real-IP,记录客户端的真实IP地址。proxy_set_header X-Real-IP \$remote_addr;# 将客户端IP追加请求报文中X-Forwarded-For首部字段proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;}
}
4、测试结果
重启代理服务器nginx,客户端测试结果
后端服务器能获取客户端IP地址