我正在运行一个包含 Nginx、FastCGI、APC、Memcache 和 Varnish 的设置来托管 MediaWiki 安装。我遇到了一些问题,匿名用户最近的更改显示为来自 127.0.0.1。我怀疑问题是 Varnish 没有正确地将用户 IP 传递给 Nginx,但我的 vcl_recv 中确实有这个:
# Set client IP
if (req.http.x-forwarded-for) {
set req.http.X-Forwarded-For =
req.http.X-Forwarded-For + ", " + client.ip;
} else {
set req.http.X-Forwarded-For = client.ip;
}
有人能告诉我还需要验证什么才能导致这个问题吗?因为我很茫然……
答案1
你必须配置 MediaWiki这样它才会真正遵守X-Forwarded-For
标头。如果没有这些设置,MediaWiki 将会忽略它。
(由于历史原因,所有这些配置选项都参考 Squid...)
至少,这些行必须位于您的LocalSettings.php
:
$wgUseSquid = true;
$wgSquidServers = array('127.0.0.1'); # IP address of your varnish server
答案2
您在配置中描述的行将X-Forwarded-For
标头设置为客户端 IP。但是,您仍需要告诉您的 Web 服务器 (Nginx) 检查并使用该值作为 IP 地址。
最简单的方法可能是使用 Nginx 的真实IP模块首先检查Nginx是否已经内置真实IP模块:
跑去nginx -V
寻找--with-http_realip_module
然后修改您的 Nginx 配置(通常是 /etc/nginx.conf),将以下内容添加到以下http
部分:
#Upstream server address (i.e. Varnish address)
set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For;
重新启动 Nginx,所有位置(日志、传递给 php 的值等)的 IP 地址现在都应该从 X-Forwarded-For 标头中派生出来。