我正在努力在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之后,一切都变好了。