2023-12-28
如何配置Nginx以获取代理服务IP及客户端真实IP
在使用Nginx作为代理服务器时,获取客户端真实IP地址是非常重要的。在实际应用中,Nginx作为反向代理服务器,将客户端请求转发给后端服务,因此需要正确获取客户端的真实IP地址。本文将介绍如何配置Nginx以获取代理服务IP及客户端真实IP。获取代理服务IP在Nginx配置中,可以通过内置变量$proxy_host来获取代理服务的IP地址。该变量会返回Nginx向上游服务器发送请求的主机名或IP地址。在需要获取代理服务IP的场景下,可以使用$proxy_host变量来记录或处理请求。```nginxlog_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for" ''"$proxy_host"';server {listen 80;server_name example.com;location / {access_log /var/log/nginx/access.log main;proxy_pass http://backend;}}```在上述配置中,log_format定义了日志格式,其中包含了$proxy_host变量用于记录代理服务IP。在具体的location中,使用proxy_pass将请求转发给后端服务,并且记录了代理服务IP地址。获取客户端真实IP由于Nginx作为代理服务器,客户端请求经过代理后,服务器端收到的请求中会包含代理服务器的IP地址而非客户端的真实IP地址。为了获取客户端真实IP地址,需要配置Nginx来传递客户端IP信息。X-Forwarded-For一种常见的方式是通过X-Forwarded-For头部来传递客户端真实IP地址。在Nginx中,可以通过设置proxy_set_header指令来添加X-Forwarded-For头部信息,从而将客户端真实IP地址传递给后端服务。```nginxserver {listen 80;server_name example.com;location / {proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://backend;}}```在上述配置中,通过proxy_set_header设置X-Forwarded-For头部信息为$proxy_add_x_forwarded_for,该变量会将客户端真实IP地址添加到X-Forwarded-For头部中。这样后端服务就能够获取到客户端真实IP地址。Real IP 模块另一种方式是使用Nginx的Real IP模块来获取客户端真实IP地址。Real IP模块可以通过设置real_ip_header和real_ip_recursive指令来指定从哪个头部获取客户端真实IP地址,并且支持递归查找。```nginxset_real_ip_from 192.168.1.0/24;real_ip_header X-Forwarded-For;real_ip_recursive on;server {listen 80;server_name example.com;location / {real_ip_header X-Forwarded-For;proxy_pass http://backend;}}```在上述配置中,通过set_real_ip_from指令指定了信任的代理服务器IP段,real_ip_header指定了从X-Forwarded-For头部获取客户端真实IP地址,并且开启了递归查找。这样就能够通过Real IP模块获取客户端真实IP地址。通过以上介绍,我们了解了如何在Nginx中获取代理服务IP及客户端真实IP地址。对于代理服务IP,可以使用$proxy_host内置变量来获取;对于客户端真实IP地址,可以通过设置X-Forwarded-For头部信息或者使用Real IP模块来传递和获取。在实际应用中,根据具体场景和需求选择合适的方式来获取客户端真实IP地址,以确保系统安全和日志记录的准确性。