我最近继承了一个基础设施,所有用户都通过 AWS ELB -> nginx 代理 -> AWS ELB -> Apache。我看到的问题是客户端的 IP 在 Apache 中显示了两次,类似于以下行:
"x.x.x.x, x.x.x.x" - - [26/Oct/2016:18:59:10 +0000] "GET /....
nginx 对这个虚拟主机的访问日志很好,花花公子:
x.x.x.x - - [26/Oct/2016:18:59:10 +0000] "GET /
问题是我不确定如何调试丢失的地方。我认为它要么是 nginx 发送的标头,要么是 Apache 中的一些奇怪的东西,尽管我怀疑它是 nginx 传递的 X-Forwarded-For 标头。以下是受影响域的相关虚拟主机配置:
location / {
if ($xxx-example-com-maintenance) {
return 503;
}
if ($http_origin ~* (https?://xxx\.example\.com)) {
add_header 'Access-Control-Allow-Origin' "$http_origin";
}
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass $upstream;
现在,Apache 的日志格式如下所示:
LogFormat "\"%{X-Forwarded-For}i\" %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" SESSION-%{frontend}C %h" forwarded
后者是从以前的 Web 堆栈中复制的,并且工作得很好。有点卡在这里,因为从我的角度来看,这一切看起来都很好。我确实发现nginx real_ip_header 和 X-Forwarded-For 似乎是错误的,但是我正在运行 nginx 1.10。Apache 版本是 2.4.23。任何有关如何进一步解决此问题的见解将不胜感激。提前致谢。