Nginx
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; }
誰能告訴我還有什麼我可能需要驗證可能導致此問題的?因為我無所適從…
您必須配置 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 標頭派生。