我使用 nginx 作为 Apache 的前端反向代理,在 nginx 内部有以下配置:
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;
}
使用 apache 在本地监听端口 8000。当我查看 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 的日志格式吗?它目前使用的是默认的组合日志。
答案1
您需要更改 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 行中切换顺序
答案2
在 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 地址。
我也会将其保留在你的 nginx 配置中:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
答案3
您只是改变了 HTTP 标头,而不是 Apache 查看连接的方式(来自 Nginx)。