Apache-2.4
當 RemoteIPHeader X-Forwarded-For 存在時,Apache 不記錄 remoteIP
我正在使用 Apache/2.4.27
在 VirtualHost 中,我從負載均衡器轉發遠端客戶端 IP 標頭:
RemoteIPHeader X-Forwarded-For
該虛擬主機服務的應用程序需要它。
這是主要 httpd.conf 上下文中的日誌格式。
LogFormat "%h (%{X-Forwarded-For}i) %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
當我在虛擬主機中列出 RemoteIPHeader X-Forwarded-For 時,Apache 停止將遠端客戶端 IP 寫入日誌。
當我從 VirtualHost 中刪除它時,遠端客戶端 IP 再次開始出現在日誌中。
任何想法為什麼
RemoteIPHeader X-Forwarded-For
不使用(%{X-Forwarded-For}i)
LogFormat ?謝謝 !
如果要使用 mod_remoteip,請將 %a 恢復為該格式。
在 bugzilla 中,mod_remoteip 在從 %{X-Forwarded-For}i 中刪除時填充 %a。因此,在使用一個受信任代理的簡單情況下,%a 將保存用於在 X-Forwarded-For 中看到的值,因為 mod_remoteip
代理層 (Nginx)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr;
後端層 (Apache)
# Log format config LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" common SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded CustomLog "logs/access_log" common env=forwarded # Header config RemoteIPHeader X-Real-IP RemoteIPHeader X-Client-IP RemoteIPInternalProxy 192.168.10.10 192.168.10.11
描述:
proxy_set_header - 指令設置 nginx 發送到後端的標頭;所以在這個例子中,我們發送兩個變數(到標題):
X-Forwarded-For
和X-Real-IP
X-Forwarded-For - 在代理端,必須設置此標頭應傳遞給後端並從其層訪問
X-Real-IP - 它不會影響網頁上所需的變數,但我們將其保持啟用狀態,以便 Apache 伺服器將客戶端的地址放在日誌中(您還需要自行設置日誌格式):
### X-Real-IP enabled 172.217.20.206 - - [03/Jun/2017:11:12:11 +0200] "GET /tls-check.php?9832 HTTP/1.0" 200 1409 ### X-Real-IP disabled 172.16.21.11 - - [03/Jun/2017:15:12:49 +0200] "GET /tls-check.php?13266 HTTP/1.0" 200 1448
捲曲
:~$ curl -H Cache-Control: no-cache -ks https://example.com/tls-check.php?${RANDOM} | grep "HTTP_X_FORWARDED_FOR\|HTTP_X_REAL_IP\|SERVER_ADDR\|REMOTE_ADDR" [HTTP_X_FORWARDED_FOR] => 172.217.20.206 [HTTP_X_REAL_IP] => 172.217.20.206 [SERVER_ADDR] => 192.168.10.100 [REMOTE_ADDR] => 192.168.10.10
tls_check.php
<?php echo '<pre>'; print_r($_SERVER); echo '</pre>'; exit; ?>