You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx对部分用户请求IP检测异常问题排查求助

Nginx访问日志IP记录异常的排查与解决

问题概述

某用户实际IP为x.x.69.209,但Nginx访问日志中记录为x.x.69.210。该用户更换网络、使用MacOS Chrome及iOS Safari测试均出现此问题,未使用代理或VPN。其他用户IP记录正常。
站点部署在AWS EC2 CentOS 7实例,Nginx版本1.20.1;同系统、同Nginx版本及配置的其他EC2站点可正常记录该用户IP。已尝试重启、升级Nginx,问题依旧。

排查步骤与解决方案

1. 检查AWS网络层面配置差异

  • 对比异常站点与正常站点的EC2弹性IP(EIP)配置,确认是否存在IP映射规则差异。
  • 查看VPC路由表、NAT网关设置,排查是否有网络地址转换(NAT)规则导致源IP被修改。
  • 开启VPC Flow Logs,追踪该用户请求的IP传输路径,确认IP是否在AWS网络环节被转换。

2. 验证Nginx日志格式与变量

  • 检查main日志格式的定义,确保正确记录客户端原始IP:
    grep -r "log_format main" /etc/nginx/
    
    确认日志格式中使用的是$remote_addr(直接连接的客户端IP),而非被代理修改后的变量。
  • 临时修改日志格式,添加$http_x_forwarded_for字段,对比日志中的IP值,判断是否存在多层代理导致的IP覆盖。

3. 排查Nginx模块与第三方服务

  • 检查Nginx是否加载了ngx_http_realip_module模块,执行命令查看编译参数:
    nginx -V
    
    如果启用了该模块,确认set_real_ip_from规则是否正确,错误的规则会导致IP被错误替换。
  • 排查站点是否默认接入了AWS Shield、CDN或第三方WAF服务,这类服务可能会修改源IP;对比正常站点是否未启用此类服务。

4. 验证后端应用的IP处理逻辑

  • 检查3000端口的后端应用是否会修改X-Real-IP或X-Forwarded-For请求头,导致日志记录的是应用处理后的IP。
  • 添加临时测试location,绕过后端应用直接验证Nginx的IP记录:
    server {
      # 保留原有配置,新增以下location
      location /test-ip {
          return 200 "RemoteAddr: $remote_addr\nX-Real-IP: $http_x_real_ip\nX-Forwarded-For: $http_x_forwarded_for";
          access_log /var/log/nginx/test-ip.log main;
      }
    }
    
    让用户访问https://<domain-of-my-site>/test-ip,查看返回内容与日志记录,定位问题出在Nginx还是后端应用。

5. 对比配置差异

  • 将异常站点的Nginx配置(包括Certbot生成的options-ssl-nginx.conf)与正常站点完全对齐,测试是否解决问题。
  • 检查/etc/letsencrypt/options-ssl-nginx.conf中是否存在代理相关的配置,可能影响IP记录。

内容的提问来源于stack exchange,提问作者Neil Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 04:00:56