我设置了 apache2.4,在访问任何 apache 服务的网站时,基本身份验证工作得很好。
现在我在端口 8000 上还有一个从其他服务运行的网络服务器,我想将 apache 设置为反向代理,希望它也可以在那里强加和处理基本身份验证......但不是要求用户和密码它只是为不受保护的网站提供服务。
我的设置是:
<VirtualHost *:8000>
ProxyPreserveHost On
ProxyPass / http://192.168.0.101:8000/
ProxyPassReverse / http://192.168.0.101:8000/
<Location />
AuthType Basic
AuthName "Authorization"
AuthUserFile /etc/htpasswd/.htpasswd
require valid-user
</Location>
</VirtualHost>
我做错了什么?
更新: 通过标记答案找到的解决方案:
<VirtualHost *:8000>
ProxyPreserveHost On
<Location />
ProxyPass http://192.168.0.101:8000/
ProxyPassReverse http://192.168.0.101:8000/
AuthType Basic
AuthName "Authorization"
AuthUserFile /etc/htpasswd/.htpasswd
require valid-user
</Location>
</VirtualHost>
还要确保将 apache 配置为侦听该端口,并且如果代理服务器是本地的,则它与侦听的端口不在同一端口上运行
答案 0 :(得分:1)
问题在于 Apache 不会“链接”Proxypass / http://example.com
和 <Location />
- 即使它们都尝试使用 /
。这意味着 Proxypass 将首先处理对“/”的请求,并且永远不会使用 Location
部分。
您需要将代理配置移动到 Location
内,删除路径,例如:
<VirtualHost *:8000>
ProxyPreserveHost On
<Location />
ProxyPass http://192.168.0.101:8000/
ProxyPassReverse http://192.168.0.101:8000/
AuthType Basic
AuthName "Authorization"
AuthUserFile /etc/htpasswd/.htpasswd
require valid-user
</Location>
</VirtualHost>