在使用 Nginx 作为反向代理时,有时候需要将客户端的真实 IP 地址传递给后端服务器,这可以通过配置XForwardedFor
和RealIP
头来实现,以下是具体的设置方法:
1、修改 Nginx 配置文件:
编辑你的 Nginx 配置文件(通常是/etc/nginx/nginx.conf
或/etc/nginx/conf.d/default.conf
),在http
块中添加以下配置:
http { ... real_ip_header XForwardedFor; set_real_ip_from 0.0.0.0/0; # 允许所有 IP 转发 real_ip_recursive on; # 支持多级代理 log_format main '$remote_addr $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; ... }
2、解释配置项:
real_ip_header XForwardedFor;
:告诉 Nginx 使用XForwardedFor
HTTP 头部字段来获取客户端的真实 IP 地址。
set_real_ip_from 0.0.0.0/0;
:设置允许所有 IP 地址的请求通过,如果只需要特定 IP 地址段,可以替换为相应的 IP 地址或子网,例如192.168.1.0/24
。
real_ip_recursive on;
:启用递归真实 IP 解析,以处理多级代理的情况。
3、重启 Nginx:
保存配置文件后,重启 Nginx 使配置生效:
sudo systemctl restart nginx
4、验证配置:
你可以通过访问日志来验证配置是否正确,Nginx 会记录客户端的真实 IP 地址到访问日志中,查看日志文件(通常位于/var/log/nginx/access.log
)确认是否记录了正确的客户端 IP 地址。
5、后端服务器配置:
如果你的后端服务器也需要知道客户端的原始 IP 地址,确保它信任并使用由 Nginx 传递的XForwardedFor
头信息,在后端的 Web 应用中读取XForwardedFor
头来获取真实的客户端 IP。
完成上述步骤后,Nginx 将会把客户端的真实 IP 地址正确地传递给后端服务器。