我正在尝试将 apache 设置为在端口 8080 上运行的 Web 后端的身份验证前端。后端没有身份验证,因此如果您curl localhost:8080
访问该网站。端口 8080 被外部阻止,因此我希望 apache 对从端口 80 访问的用户进行身份验证,然后代理到端口 8080。
我相信这应该是可能的,正如 stackoverflow 上的这篇文章所示: https://stackoverflow.com/questions/724599/setting-up-an-apache-proxy-with-authentication
我尝试过复制此操作,但是无法让 Apache 进行身份验证;它只是直接传递给代理。以下是虚拟主机配置:
<VirtualHost *:80>
ServerName external.mywebsite.com
<Location "/">
Satisfy any
require valid-user
order allow,deny
Allow from all
</Location>
ProxyRequests off
ProxyPreserveHost on
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
<Proxy *>
Order deny,allow
Allow from all
AuthType Basic
AuthName "Private"
AuthBasicProvider file
AuthUserFile /path/to/htpasswd
Require valid-user
</Proxy>
</VirtualHost>
这与从后端浏览 external.mydomain.com 输出的效果一样好。因此,代理本身可以正常工作,但 Auth 指令似乎被忽略了。我还尝试将 Auth 指令移到块中<location>
,但这具有完全相同的效果。
我在 Ubuntu 12.04 上运行 Apache2 v2.2.22。有什么建议吗?
答案1
Satisfy any
正如其名称所示:它允许基于身份验证的访问或者IP 访问控制。
由于您在代理块中允许前者并在位置块中允许后者,因此无需身份验证。