Apache 2.4 反向代理设置不能强加基本身份验证

Posted

技术标签:

【中文标题】Apache 2.4 反向代理设置不能强加基本身份验证【英文标题】:Apache 2.4 reverse proxy setup cannot impose basic authentication 【发布时间】:2021-08-21 23:05:52 【问题描述】:

我已经设置了 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 配置为侦听该端口,并且如果代理服务器是本地的,它不会在与侦听的端口相同的端口上运行

【问题讨论】:

【参考方案1】:

问题在于 Apache 没有“链接”Proxypass / http://example.com&lt;Location /&gt; - 即使它们都尝试使用 /。这意味着 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>

【讨论】:

嗨,谢谢您的解决方案,这是正确的答案,从 2 天尝试各种事情开始的错误配置使它看起来不起作用,但我发现了我的错误,现在它工作得很好!再次感谢!

以上是关于Apache 2.4 反向代理设置不能强加基本身份验证的主要内容,如果未能解决你的问题,请参考以下文章

使用 Apache 2.4 mod_proxy 和基本身份验证在 Docker 容器中运行 Portainer

具有基本身份验证的 Apache 和 Tomcat 反向代理:Tomcat 可以接收用户名吗?

如何使用基本身份验证保护在 Apache2 虚拟主机中反向代理的 Tomcat webapp?

Apache 2.4 - 简单的反向代理 - 不适用于多个条目

apache websockets反向代理

apache配置文件反向代理PHP和https