TeamCity背后的nginx代理

我正在努力在nginx背后设置TeamCity。 我想https://public.address.com/teamcity/ …redirect到http://127.0.0.1:8111/ …,但即使nginx成功,login页面返回引用如下所示:

<script type="text/javascript" src="/res/-8762791360234593415.js?v=1305815890782"></script> 

显然,这是不行的,并且摆弄rootURL设置( 服务器URL:服务器configuration中 )没有任何区别。

如何在非根URL下的代理之后运行TeamCity?


FWIW,这里是我的nginxconfiguration的相关部分:

 location /teamcity/ { proxy_pass http://127.0.0.1:8111/; proxy_redirect http://127.0.0.1:8111/ https://$host/teamcity/; } 

我使用标准的Teamcity Windows安装程序来完成这项工作,而且大概可以在任何平台上运行。

更改团队位置

根据JetBrains员工的评论 :

要将TeamCity地址从http://server/更改为http://server/teamcity/ ,请将<TeamCity home>\webapps\ROOT目录重命名为<TeamCity home>\webapps\teamcity

还要注意,每次升级TeamCity时都需要重命名这个目录。

代理配置

nginx配置然后看起来像这样:

  location /teamcity/ { proxy_pass http://teamcity-server.domain.com/teamcity/; } 

或者你可以使用Apache(由于我有认证要求,我切换到Apache):

  <Location /teamcity> ProxyPass http://teamcity-server.domain.com/teamcity ProxyPassReverse http://teamcity-server.domain.com/teamcity </Location> 

重定向旧网址

我还创建了一个新的 <Teamcity home>\webapps\ROOT ,并在其中添加一个index.jsp文件,该文件重定向到新的URL,以便旧链接继续工作(例如,如果有人转到http:// teamcity-server .domain.com它重定向到http://teamcity-server.domain.com/teamcity ):

 <!DOCTYPE html> <html> <head> <title>TeamCity</title> <meta http-equiv="refresh" content="0;url=/teamcity/overview.html"/> </head> <body> <!-- no content --> </body> </html> 

你也可以在nginx / apache中做重定向,但是在TeamCity服务器上的做法意味着如果有人直接在teamcity web服务器上(而不是通过你的代理服务器)去旧URL,他们仍然会被正确的重定向(而不是404 )。

(我最终自己找到了一个解决方案…)

安装tomcat,然后安装TeamCity的WAR版本,该版本位于Java EE容器选项卡上方的下载区域。 这暴露了TeamCity的基本URL,您可以在安装WAR时选择。

最简单的方法是将.war文件复制到Tomcat的webapps目录中,并为其指定一个与所需基本URL匹配的名称。 例如,将teamcity.war安装到$TOMCAT_HOME/webapps将会在URL http://localhost:8080/teamcity (假设默认的Tomcat安装) teamcity.war入TeamCity。 从https://public.address.com/teamcity到这个内部地址的代理在nginx中应该是相当直接的。

在安装.war文件后,我很难让它立即运行,但在重新启动Tomcat之后,一切都变好了。