我们使用 Apache 作为反向代理,因此我们的一些内部开发/测试服务器可以在开放的 Internet 上访问以用于 UAT/CAT 目的。
我们通过 LDAP 服务器进行了基本的身份验证设置,但我们有一些站点需要将某些特定 IP 列入白名单,以便它们无需经过身份验证即可访问服务器。
我不确定在当前部分之上添加这样的另一部分是否可行:
<proxy *>
Require all granted
Require ip x.x.x.x y.y.y.y
</proxy>
该文件当前的样子如下.conf
:
<VirtualHost *:80>
ServerName some.server.url
## Vhost docroot
DocumentRoot "/var/www"
## Directories, there should at least be a declaration for /var/www
<Directory "/var/www">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Require all granted
</Directory>
## Logging
ErrorLog "/var/log/httpd/some.server.url_error.log"
ServerSignature Off
CustomLog "/var/log/httpd/some.server.url_access.log" combined
## Proxy rules
ProxyRequests Off
ProxyPreserveHost Off
ProxyPass /robots.txt !
ProxyPassReverse /robots.txt !
ProxyPass / https://some.server.url/ acquire=3000 keepalive=On retry=0 timeout=1800
ProxyPassReverse / https://some.server.url/
## Custom fragment
<proxy *>
AuthBasicProvider ldap-client-websites ldap-sidlee-dig
AuthType Basic
AuthName "GRM CRHA UAT"
Require valid-user
</proxy>
</VirtualHost>
答案1
不,不要添加第二个<proxy *>
块,因为它会与第一个块冲突。
相反,将现有<proxy *>
块更改为:
## Custom fragment
<proxy *>
AuthBasicProvider ldap-client-websites ldap-sidlee-dig
AuthType Basic
AuthName "GRM CRHA UAT"
<RequireAny>
Require ip x.x.x.x y.y.y.y
Require valid-user
</RequireAny>
</proxy>
</VirtualHost>
这样,只需满足其中的一个Require
指令<RequireAny>
就足以允许访问。所以,任何一个具有匹配的 IP 地址或者需要成功的身份验证才能允许访问。
答案2
我从来没有能够在 Apache 中使用代理来完成这样的事情。
我很想设置一个专用于另一个 TCP 端口的附加代理,然后以类似的方式定义第二个端口。然后,您可以禁用第二个端口的身份验证。
然后可以创建第二个端口的 IPTables 规则,该规则将限制对您想要允许进入系统的 IP 的访问。
我会提醒您,这是一个有些复杂的过程,如果您确实想走这条路,我会仔细考虑。