Настройка YouTrack через https через обратный прокси IIS
Я пытаюсь настроить YouTrack вместе с сервисами JetBrains TeamCity, Hub и UpSource для работы через https с помощью обратного прокси-сервера IIS.
Я действовал так, как подробно описано в документации, но у меня не было никакого успеха, несмотря на то, что я пробовал различные варианты, я не смог найти удачный вариант.
В настоящее время YouTrack установлен на сервере под URL-адресом: http://server.company.com:8080/issues
Я пытаюсь заставить его работать по следующему URL: https://server.company.com/youtrack/
Мне уже удалось настроить практически идентичный URL Rewrite для OctopusDeploy на том же сервере (https://server.company.com/octopus/
-> http://server.company.com:8888/octopus
), поэтому я знаю, что это по крайней мере теоретически возможно. В общем, я знаю, что проблема должна быть связана с YouTrack, в отличие от IIS. Кроме того, он работает для TeamCity и вроде работает для Hub (некоторые проблемы с безопасностью из-за того, что Hub использует http для некоторых вещей).
Во всяком случае, мой web.config в настоящее время выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<clear />
<rule name="Reverse Proxy to TeamCity" stopProcessing="true">
<match url="^teamcity/(.*)" />
<action type="Rewrite" url="http://server.company.com/{R:1}" />
</rule>
<rule name="Reverse Proxy to YouTrack" stopProcessing="true">
<match url="^youtrack/(.*)" />
<action type="Rewrite" url="http://server.company.com:8080/issues/{R:1}" />
<serverVariables>
<set name="HTTP_X_FORWARDED_HOST" value="{HTTP_HOST}" />
<set name="HTTP_X_FORWARDED_SCHEMA" value="https" />
<set name="HTTP_X_FORWARDED_PROTO" value="https" />
</serverVariables>
</rule>
<!--rule name="Reverse Proxy to Oauth" stopProcessing="true">
<match url="^oauth(.*)" />
<action type="Rewrite" url="http://server.company.com:8080/oauth{R:1}" />
</rule-->
<rule name="Reverse Proxy to Hub" stopProcessing="true">
<match url="^hub/(.*)" />
<action type="Rewrite" url="http://server.company.com:8082/hub/{R:1}" />
</rule>
<rule name="Reverse Proxy to UpSource" stopProcessing="true">
<match url="^upsource/(.*)" />
<action type="Rewrite" url="http://server.company.com:8081/{R:1}" />
</rule>
<rule name="Reverse Proxy to Octopus" stopProcessing="true">
<match url="^octopus/(.*)" />
<action type="Rewrite" url="http://server.company.com:8888/octopus/{R:1}" />
</rule>
<rule name="Reverse Proxy to Collaboration General" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://server.company.com/{R:1}" />
</rule>
</rules>
</rewrite>
<security>
<requestFiltering>
<requestLimits maxUrl="6144" maxQueryString="4096" />
</requestFiltering>
</security>
</system.webServer>
</configuration>
В настоящее время это приводит к перенаправлению на страницу TeamCity 404, которое происходит, когда YouTrack каким-то образом удается перенаправить на https://server.company.com/oauth/?state=%2Fissues%2F
это заменяет перезапись URL-адреса, тем самым вызывая действие по умолчанию "Обратный прокси-сервер к общему сотрудничеству" (я должен был добавить это, чтобы заставить TeamCity работать), потому что URL больше не соответствует шаблону для правила YouTrack.
Я добавил следующее правило, чтобы противостоять этому:
<rule name="Reverse Proxy to Oauth" stopProcessing="true">
<match url="^oauth(.*)" />
<action type="Rewrite" url="http://server.company.com:8080/oauth{R:1}" />
</rule>
Однако, когда это правило активно, я вместо этого перенаправлен на пустую страницу в https://server.company.com/oauth?state=%2Fissues%2F
,
Я также попробовал следующий вариант с завершающим "/" после "oauth":
<rule name="Reverse Proxy to Oauth" stopProcessing="true">
<match url="^oauth/(.*)" />
<action type="Rewrite" url="http://server.company.com:8080/oauth/{R:1}" />
</rule>
Однако это приводит только к появлению следующей текстовой страницы:
Diese Seite wurde nicht gefunden
Sie sind nicht angemeldet.
Zurück Anmelden Tickets
Все эти результаты относятся к конфигурациям, основанным на следующей команде:
youtrack.bat configure --listen-port 8080 --base-url https://server.company.com:443
Я также попробовал следующий вариант этой команды:
youtrack.bat configure --listen-port 8080 --base-url https://server.company.com/youtrack/
Однако это вызывает только следующую ошибку:
HTTP ERROR: 404
Problem accessing /issues/. Reason:
Not Found
Powered by Jetty:// 9.3.20.v20170531
Кроме того, изменение файла web.config не должно указывать на проблемы, такие как:
<action type="Rewrite" url="http://server.company.com:8080/{R:1}" />
... только вызывает соответствующее сообщение об ошибке:
HTTP ERROR: 404
Problem accessing /. Reason:
Not Found
Powered by Jetty:// 9.3.20.v20170531
На данный момент, я в значительной степени в своем уме. Я перепробовал все, что мог придумать, и до сих пор не приблизился ни на шаг ближе к решению. Я точно знаю, что можно запустить YouTrack под https, потому что сам трекер проблем JetBrains делает это ( https://youtrack.jetbrains.com/), но я не могу понять, как заставить его работать на нас,
У кого-нибудь есть идеи, как мне это решить? Любые указатели или предложения будут с благодарностью на этом этапе.
ОБНОВЛЕНИЕ 4-Апр-2018
Я добился определенного прогресса в этом, но он все еще не совсем работает.
Сотрудник службы поддержки клиентов из YouTrack указал мне, что базовый URL и URL перенаправления должны заканчиваться на одном и том же пути, поэтому я использовал эту команду на youtrack.bat...
youtrack.bat configure --listen-port 8080 --base-url http://server.company.com:8080/youtrack
... и настройте раздел web.config следующим образом:
<rule name="Reverse Proxy to YouTrack" stopProcessing="true">
<match url="^youtrack(.*)" />
<action type="Rewrite" url="http://server.company.com:8080/youtrack{R:1}" />
<serverVariables>
<set name="HTTP_X_FORWARDED_HOST" value="{HTTP_HOST}" />
<set name="HTTP_X_FORWARDED_SCHEMA" value="https" />
<set name="HTTP_X_FORWARDED_PROTO" value="https" />
</serverVariables>
Теперь я дошел до логина.
С этого момента проблема, по-видимому, связана с Hub, поскольку при входе в систему я перенаправляю меня на http-версию hub, а затем ловлю в бесконечном цикле, где каждая попытка входа просто перенаправляет на страницу входа.
2 ответа
Измените базовые URL-адреса с http на https для YouTrack ( https://www.jetbrains.com/help/youtrack/standalone/Reverse-Proxy-Configuration.html) и концентратора ( https://www.jetbrains.com/help/hub/Proxy-Configuration.html) и перезапустите обе службы. Пожалуйста, также следует решить проблему с перенаправлением. Если это не так, попробуйте очистить кеш браузера и проверьте снова. Пожалуйста, дайте мне знать, если это поможет.
Хорошо, я понял, как это сделать. Ответ Аны был почти верным, но в нем не было одного последнего важного шага: перенастройка параметра hub-url для YouTrack, чтобы он соответствовал новому URL-адресу Hub.
ПРИМЕЧАНИЕ. Все команды начинаются с hub.bat
должны быть выполнены на hub.bat
файл в [Hub Installation Directory]\bin
и все команды, начинающиеся с youtrack.bat
должны быть выполнены на youtrack.bat
файл в [YouTrack Installation Directory]\bin
,
youtrack.bat stop
hub.bat stop
hub.bat configure --listen-port 8082 --base-url https://server.company.com/hub
youtrack.bat configure --listen-port 8080 --base-url=https://server.company.com/youtrack --hub-url=https://server.company.com/hub/hub
hub.bat start
youtrack.bat start
ПРИМЕЧАНИЕ: я не знаю почему, но Hub добавляет дополнительный / hub после своего базового адреса, поэтому настройка URL-адреса hub для YouTrack заканчивается на /hub/hub
,
После этого все, что мне нужно было сделать, это добавить URL-адрес перенаправления в список разрешенных URL-адресов перенаправления для YouTrack в Hub > Settings > Services > YouTrack, и теперь он работает отлично.