一、简介
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,右边为经过的代理服务器ip
proxy_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; # 重写url
proxy_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地址
到此这篇关于nginx中ip地址透传的应用实现的文章就介绍到这了,更多相关nginx ip地址透传内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论