Varnish 无法正确将用户 IP 传递给 MediaWiki

Varnish 无法正确将用户 IP 传递给 MediaWiki

我正在运行一个包含 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 标头中派生出来。

相关内容