DaW*_*444 4 httpd.conf virtualhost apache-2.4
我正在使用 Apache/2.4.27
在 VirtualHost 中,我使用以下命令从 Loadbalancer 转发远程客户端 IP 标头:
RemoteIPHeader X-Forwarded-For
Run Code Online (Sandbox Code Playgroud)
该 Virtualhost 服务的应用程序需要它。
这是主 httpd.conf 上下文中的日志格式。
LogFormat "%h (%{X-Forwarded-For}i) %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Run Code Online (Sandbox Code Playgroud)
当我在虚拟主机中列出 RemoteIPHeader X-Forwarded-For 时,Apache 停止将远程客户端 IP 写入日志。
当我从 VirtualHost 中删除它时,远程客户端 IP 开始再次出现在日志中。
任何想法为什么RemoteIPHeader X-Forwarded-For
不(%{X-Forwarded-For}i)
从 LogFormat玩?
谢谢 !
代理层(Nginx)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
Run Code Online (Sandbox Code Playgroud)
后端层 (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
Run Code Online (Sandbox Code Playgroud)
描述:
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
Run Code Online (Sandbox Code Playgroud)
卷曲
:~$ 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
Run Code Online (Sandbox Code Playgroud)
tls_check.php
<?php
echo '<pre>';
print_r($_SERVER);
echo '</pre>';
exit;
?>
Run Code Online (Sandbox Code Playgroud)
如果您要使用 mod_remoteip,请将 %a 恢复为该格式。
在 bugzilla 中,mod_remoteip 填充 %a,同时从 %{X-Forwarded-For}i 中删除。因此,在具有一个受信任代理的简单情况下,%a 将保存用于在 X-Forwarded-For 中看到的值,因为 mod_remoteip
归档时间: |
|
查看次数: |
25291 次 |
最近记录: |