使用 Tomcat 进行基本身份验证 Apache

使用 Tomcat 进行基本身份验证 Apache

我有以下服务器设置:

  • Apache Tomcat 7 运行 Atlassian 的 Jira ( http:// <server-ip>:8081/tickets)
  • Apache 2.4 Web 服务器作为反向代理,目前仅为 jira 应用程序提供服务,但未来还会提供更多服务 ( http://<server-ip>/tickets)

现在,我想http://<server-ip>/*通过设置基本身份验证来限制对整个系统的访问(即)。

这是唯一启用的 Apache 站点配置的样子:

<虚拟主机 *:80>
        <代理 *>
            要求所有已授予
        </代理>

        ProxyRequests 关闭
        ProxyPreserveHost 开启

        ProxyPass /票证 http://localhost:8081/票证
        ProxyPassReverse /tickets http://localhost:8081/tickets

        <位置 />
                允许覆盖 AuthConfig
                AuthType 基本版
                AuthName“受限内容”
                验证用户文件 /etc/apache2/.htpasswd
                要求用户 myuser
        </位置>
</虚拟主机>

但是使用此配置时,我在尝试登录时遇到了问题。输入登录数据后,登录窗口会弹出,再次要求登录。三次尝试后,tomcat!应用程序返回了 401 错误,而不是 apache。

apache 的 access.log 和 error.log 中均没有此请求的条目。尽管 apache 会记录带有错误凭据的请求。

如何配置 Apache 将所有/tickets/*请求代理到 Tomcat,同时强制客户端在访问时进行身份验证/*

答案1

我从 tomcat 应用程序收到 401 错误,这让我怀疑起来。看来,apache 转发了授权请求,尽管它不应该转发。我不得不"Authorization"从请求标头中删除该参数。

要做到这一点。我在 ProxyPass 指令之前启用mod_headers并添加了。RequestHeader unset "Authorization"

所以我的配置现在如下所示:

<虚拟主机 *:80>

        ProxyRequests 关闭
        ProxyPreserveHost 开启

        RequestHeader 未设置“授权”       

        <位置“/tickets/rest/”>
                  满足任何
                  命令允许、拒绝
                  允许所有人
        </位置>

        <位置 />
                AuthType 基本版
                AuthName“受限内容”
                验证用户文件 /etc/apache2/.htpasswd
                要求用户 myuser
        </位置>

        ProxyPass /票证 http://localhost:8081/票证
        ProxyPassReverse /tickets http://localhost:8081/tickets

</虚拟主机>

编辑:

Jira 对小工具使用自己的 REST-API,所以我必须为/tickets/rest路径定义一个位置标签。

  • 删除代理标签
  • 为 jira-rest API 添加了位置标签

从以下来源获得解决问题的想法:

答案2

你需要替换Require user myuserRequire valid-user

并删除

    <Proxy *>
        Require all granted
    </Proxy>

相关内容