如何设置 apache 2.2 的基本身份验证以绕过 IP?我已关注此 wikihttp://wiki.apache.org/httpd/BypassAuthenticationOrAuthorizationRequirements,但总是要求输入密码,也要求列出 IP:
<Directory /var/www/html/mydir>
AuthName "Private"
AuthType Basic
AuthUserFile "/etc/httpd/htpasswd"
Require valid-user
Order allow,deny
Allow from 111.111.111.111 222.222.222.222
Satisfy any
</Directory>
我在haproxy下,但是我将IP设置为转发,我已经LogFormat
这样设置:
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
access_log 是:
111.111.111.111 - - [25/Oct/2016:12:35:41 +0200] "GET /index.html HTTP/1.1" 401 487 "-" "Mozilla/5.0 (X11; Linux armv7l; rv:38.0) Gecko/20100101 Firefox/38.0 Iceweasel/38.7.0"
答案1
您的配置很好,非常标准。如果您使用的haproxy
是全部请求是其haproxy
本身,并且该allow from
指令是根据这个 IP 地址进行检查的,而不是根据标头的内容X-Forwarded-For
。
有几种方法可以使固定这个。在 Apache v2.2 中,您可以使用第三方模块,例如 mod_custom_headers (http://support.en.ctx.org.cn/ctx109555.citrix抱歉,原始 citrix 页面似乎已被移动或删除)或可能mod_rpaf
(我以前没有使用过它,因此不确定它是否能allow from
正常工作)。
这些模块修改 Apache 保存的有关请求的数据,以便源 IP 成为由您的代理设置的命名标头的值(例如X-Forwarded-For
)。
或者,您可以升级到 Apache v2.4 并使用 mod_remoteip,它可以执行相同的操作。
请注意,还有一个 Apache 配置解决方案,您可以通过它在上设置自己的标头haproxy
(或者,如果您信任它,也可以使用它X-Forwarded-For
)。类似于:
SetEnvIf X-Forwarded-For ^111.111.111.111 access_granted_by_ip
SetEnvIf X-Forwarded-For ^222.222.222.222 access_granted_by_ip
Order allow,deny
Allow from env=access_granted_by_ip
但我承认,对于多个 IP 地址来说,它有点笨重。