我使用nginx作为Apache的前端反向代理,我在nginx里有如下configuration:
location / { if (-f $request_filename) { add_header X-Static hit; access_log off; } if (!-f $request_filename) { proxy_pass https://127.0.0.1:8000; add_header X-Static miss; }
用本地端口8000监听apache。 当我看着Apache的日志时,所有的请求都来自于127.0.0.1:443(这是nginx所在的地方)。 我想转发真正的IP到Apache,以便它正确地存储在日志中。
我试图将下面的行添加到位置块无济于事
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
我在这里错过了一步吗? 我需要更改apache的日志格式吗? 它正在使用默认的组合日志。
你需要改变apache的日志格式来支持x-forward
例如
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{X-Forwarded-For}i" combined
那么你可以使用
CustomLog logs/access_log combined
所以你的日志中的最后一个条目将是nginx为真实IP设置的标题。 当然,您可以切换LogFormat行中的顺序
你只是改变HTTP标题,而不是Apache如何看到连接的方式(来自Nginx)。
看看mod_rpaf apache模块
在deb / ubuntu上,你可以安装软件包名称libapache2-mod-rpaf
安装完成后,将您的nginx IP添加到/etc/apache2/mods-available/rpaf.conf中的RPAFproxy_ips设置
<IfModule mod_rpaf.c> RPAFenable On RPAFsethostname On RPAFproxy_ips 127.0.0.1 </IfModule>
重新启动apache,你应该在日志中看到正确的IP地址。
我会保持在你的nginxconfiguration中:
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr;