Apache mod_auth 和 mod_proxy 无法协同工作

Apache mod_auth 和 mod_proxy 无法协同工作

我正在尝试将 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 访问控制。

由于您在代理块中允许前者并在位置块中允许后者,因此无需身份验证。

相关内容