Apache 作为 tomcat 的反向代理(运行 jenkins)

Apache 作为 tomcat 的反向代理(运行 jenkins)

我已经将 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 中的虚拟主机,其他代理配置指令也位于其中。我不再看到该问题。

相关内容