代理背后的 Apache:绕过某些 ip 的 Auth Basic

代理背后的 Apache:绕过某些 ip 的 Auth Basic

我需要绕过一些IP的基本身份验证,Apache是​​2.4并且落后于haproxy,我已将其插入到文档根部分:

<Directory /path/to/webroot>
    AuthUserFile /etc/apache2/.htpasswd
    AuthType Basic
    AuthName "Restricted Content"
    <Limit GET>
        Require valid-user
    </Limit>
    Require ip xxx.xxx.xxx.xxx
    Satisfy any
</Directory>

但是不起作用,apache位于代理后面,它可能不起作用,因为到达apache的ip是代理而不是客户端

答案1

启用并配置mod_remoteip。您的代理将像X-Forwarded-ForHTTP 请求一样在标头中设置原始远程 IP 地址。将其传递给RemoteIpHeader放置在外部的指令<Directory>

%a如果 mod_remoteip 工作正常,则可以使用in看到代理传递的原始远程地址LogFormat。您应该首先检查这一点。

Apache 2.4Satisfy指令是已弃用. 并且您最好不要通过添加不必要的内容来使授权条件复杂化<Limit>

尝试使用以下配置:

RemoteIPHeader X-Forwarded-For

<Directory /path/to/webroot>
    AuthUserFile /etc/apache2/.htpasswd
    AuthType Basic
    AuthName "Restricted Content"
    Require valid-user
    Require ip xxx.xxx.xxx.xxx
</Directory>

相关内容