我已经将 apache 设置为运行 jenkins-CI 的 tomcat 的反向代理。我可以从外部正常访问该站点,但当我登录 jenkins 时,它会重定向到我的 lan-hostname,并且在我的网络之外它当然会失败。之后,我可以手动将原始地址输入到浏览器中,它会正常工作,直到我必须再次登录。
我想知道这是否是 jenkins 中的问题,或者我的 apache/tomcat 代理设置中的问题。
Jenkins 还在管理页面上报告我的代理设置不正确,但没有进一步说明。
Apache VirtualHost 配置:
<VirtualHost *:80>
ServerName jenkins.outsideaddress
ServerAlias ci.outsideaddress jenkins.insideaddress ci.insideaddress
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
此外,还会加载代理和 proxy_http 模块(根据apachectl -M
)
答案1
尝试在 ProxyPassReverse 之后添加此项。outsideaddress 是您的外部 FQDN。
RewriteEngine on
RedirectMatch ^/(.*)$ http://outsideaddress/$1
答案2
在 Jenkins 中,查看“管理 Jenkins”,然后向下滚动到“Jenkins URL”字段。将其更改为 jenkins.outsideaddress。
对于内部访问,请设置 LAN DNS 以通过重命名或通过 CNAME 将 jenkins.outsideaddress 解析为 jenkins.insideaddress。您还可以在将重定向到 jenkins.outsideaddress 的内部地址上设置一个 catchall。
答案3
我终于能够解决这个问题了(至少我这么认为)!
我在尝试配置 nexus maven 存储库以使其在类似的 apache httpd 代理配置下正常工作时遇到了类似的问题。然后我碰巧遇到了一个提交给他们的问题跟踪器的问题,其中它错误地构建了一些 URL。
在评论中,建议的修复方法是添加
ProxyPreserveHost On
到 httpd conf 中的虚拟主机,其他代理配置指令也位于其中。我不再看到该问题。