0

我需要在 httpd conf 中使用真实 IP 而不是 Proxy / Loabalancer IP 的 RewriteCond 语法。我的用例是一个维护页面,应该向所有用户显示,除了我的例外列表中的一些用户,由单独文件中列出的 IP 地址定义。

我已经在 apache 中将 REMOTE_ADDR 设置为 X-Forwarded-For 但我没有得到我需要的点。

我已将 Logformat 配置为

LogFormat "%{X-Forwarded-For}i \"test\" %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

我的输出是

www.xxx.yyy.zzz "test" 10.0.0.215 - - [22/May/2019:11:09:20 +0200]

但也可能是

www.xxx.yyy.zzz, 10.0.0.12 "test" 10.0.0.215 - - [22/May/2019:11:09:19 +0200]

所以我需要在我的用例中提取的第一个 IP。我的 httpd.conf 中有什么:

RewriteMap exceptions /appli/tecracer/apps/helios-fas/maintenance/exceptions.map

    # Allow Individual IP addresses past maintenance page
    RewriteCond ${exceptions:%{REMOTE_ADDR}} =OK
    RewriteRule ^ - [L]

我需要的是真实 IP,而不是 REMOTE_ADDR,它是 X-Forward-For 标头信息的第一个条目。我如何才能提取这个并且我可以相信第一个 IP 每次都是客户端 IP?

4

1 回答 1

0

你看过 remoteip_module apache 模块吗?

你需要包含它,配置很简单:

LoadModule remoteip_module modules/mod_remoteip.so
RemoteIPHeader x-forwarded-for

我的代理是 haproxy,在后端部分:

option  forwardfor

forwardfor 选项确保转发的请求包含实际的客户端 IP 地址。

那么 remote_addr 将是客户端 IP

于 2019-12-11T15:07:07.313 回答