Nginx

Varnish 未將使用者 IP 正確傳遞給 MediaWiki

  • February 9, 2013

我正在使用 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;
}

誰能告訴我還有什麼我可能需要驗證可能導致此問題的?因為我無所適從…

您必須配置 MediaWiki以使其真正服從X-Forwarded-For標頭。如果沒有這些設置,MediaWiki 將忽略它。

(由於歷史原因,所有這些配置選項都參考 Squid…)

至少,這些行必須在您的LocalSettings.php:

$wgUseSquid = true;
$wgSquidServers = array('127.0.0.1'); # IP address of your varnish server

您從配置中描述的X-Forwarded-For行將標頭設置為客戶端 IP。但是,您仍然需要告訴您的 Web 伺服器 (Nginx) 檢查並使用該值作為 IP 地址。

最簡單的方法可能是使用 Nginx 的Real 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,所有位置的 IP 地址(日誌、傳遞給 php 的值等)現在應該從 X-Forwarded-For 標頭派生。

引用自:https://serverfault.com/questions/477082