Apache-2.4

當 RemoteIPHeader X-Forwarded-For 存在時,Apache 不記錄 remoteIP

  • May 22, 2020

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

?>

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