TeamCity за прокси nginx

Я пытаюсь настроить TeamCity за nginx. Я хочу, чтобы https://public.address.com/teamcity/... перенаправлял на http://127.0.0.1:8111/..., но хотя nginx делает это успешно, логин страница возвращается со ссылками, которые выглядят так:

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

Очевидно, что это не сработает, и игра с настройкой rootURL (URL-адрес сервера: в Конфигурация сервера) не имеет никакого значения.

Как запустить TeamCity за прокси-сервером с некорневым URL-адресом?


FWIW, вот соответствующая часть моей конфигурации nginx:

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

person Marcelo Cantos    schedule 20.05.2011    source источник
comment
на всякий случай вот последняя официальная документация по настройке обратного прокси для сервера TeamCity.   -  person KIR    schedule 08.04.2021


Ответы (2)


Я сделал это с помощью стандартного установщика Teamcity для Windows, и, предположительно, он будет работать на любой платформе.

Изменить местоположение Teamcity

Согласно комментарию сотрудника 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>

Перенаправить старый URL

Я также создал новый <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 означает, что если кто-то перейдет по старому URL-адресу непосредственно на веб-сервере teamcity (а не через ваш прокси-сервер), он все равно будет правильно перенаправлен (вместо 404). ).

person gregmac    schedule 01.08.2013
comment
Просто хотел уточнить: папку ROOT следует переименовать в ваше целевое имя, а не перемещать в папку с вашим целевым именем. - person Frederik; 02.10.2014
comment
@ Фредерик Правильно. Во мне выходит *nix .. (переместить == переименовать). Я обновлю свой ответ. - person gregmac; 02.10.2014
comment
Также следует добавить еще одну вещь: хотя это заставит базовое веб-приложение функционировать, агент сборки будет иметь статус отключен. Вам необходимо обновить buildAgent/conf/buildAgent.properties, указав новый URL-адрес. - person Frederik; 07.10.2014
comment
Спасибо! Я искал решение в течение нескольких дней, и это отлично сработало для меня! У меня есть несколько веб-приложений, работающих в одном и том же окне Windows (обслуживающих разные нестандартные порты). Я использую nginx для сопоставления запросов для my.server.local/teamcity -> my.server.local:9001. У меня уже была правильная часть конфигурации nginx, но teamcity неправильно загружала файлы статических изображений. Переименование ‹team city home›\webapps\ROOT в ‹team city home›\webapps\teamcity было ключом к моей настройке. - person Matt Merrifield; 12.12.2014

(В конце концов я сам нашел решение...)

Установите tomcat, затем установите WAR-версию TeamCity, которая находится в области загрузки над Контейнер Java EE. Это предоставляет TeamCity под базовым URL-адресом, который вы можете выбрать во время установки WAR.

Самый простой подход — скопировать файл .war в каталог веб-приложений Tomcat, присвоив ему имя, соответствующее желаемому базовому URL-адресу. Например, установка teamcity.war в $TOMCAT_HOME/webapps загрузит TeamCity под URL-адресом http://localhost:8080/teamcity (при условии установки Tomcat по умолчанию). Проксирование с https://public.address.com/teamcity на этот внутренний адрес должно быть довольно простым в nginx.

У меня возникли проблемы с запуском сразу после установки файла .war, но после перезапуска Tomcat все стало хорошо.

person Marcelo Cantos    schedule 21.05.2011
comment
Вам также может понадобиться добавить схему=https в элемент Connector ‹teamcity›/conf/server.xml (или добавить еще один Connector, специфичный для прокси-сервера), чтобы TeamCity знал, что все URL-адреса должны быть https:// - person Eugene Petrenko; 19.06.2012
comment
Отличное предложение использовать тот же относительный URL. Я сделал то же самое, чтобы перенаправить https-соединение на внутренний адрес 8080, и он работает как шарм, когда он терпит неудачу с другим относительным URL-адресом. - person BxlSofty; 25.06.2014