2017-03-02 83 views
0

所以我試圖讓客戶端IP地址記錄在新的安裝Varnish 4(我們一直在使用3到這一點)在nginx和在AWS負載均衡器後面,並且似乎無法獲取客戶端IP地址以在清漆下記錄。Varnish 4日誌代理/負載平衡器,而不是客戶端IP地址

以前在3我們使用這在sub_recv()的頂部:

std.collect(req.http.x-forwarded-for); 
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; 
} 

並且還此另一服務器上:

std.collect(req.http.x-forwarded-for); 
if (req.http.x-forwarded-for) { 
     std.log("ip:" + req.http.x-forwarded-for); 
} else { 
     std.log("ip:" + client.ip); 
} 

這些都不在清漆4個工作然而和第一個代碼塊基本上是從我讀過的內容中被編碼爲清漆的內容。 我也試過這無果:

remove req.http.X-Forwarded-For; 
set req.http.X-Forwarded-For = client.ip; 

這最後一個項目是什麼仍然是在VCL。我已將整個vcl放在pastbin(http://pastebin.com/Q1nCprxL)上,刪除了一些不相關的部分。 x-forwarded-for在那裏,清漆只是記錄最右邊的IP地址,而不是最左邊的IP地址。

X-Forwarded-For: 209.53.112.36, 172.25.10.228 

回答

0

所以很可能這些方法都應該工作。然而,其中哪一個是你實際使用的是你自己。事實證明,我的問題的答案不是由於3和4之間的任何差異,而是由於lack of a return(hash) at the end of vcl_recv()(以及刪除X-Forwarded-For中最後一個IP以外的所有可能的錯誤)導致的錯誤。