我有以下服务器设置:
- 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 myuser
为Require valid-user
并删除
<Proxy *>
Require all granted
</Proxy>