Я пытаюсь разместить JetBrains TeamCity (который использует TomCat на порту 81) за IIS 7, так чтоhttp://www.example.com/teamcity/прокси-сервер дляhttp://мойсервер:81/. Я думаю, что у меня это в основном работает, за исключением того, что TeamCity выводит @import в <style>
элементе. Я не могу понять, как определить исходящее правило, чтобы справиться с этим.
Как мне заставить URL-адреса переписываться, чтобы справиться с этой проблемой?
Или, в качестве альтернативы, я могу объяснить TeamCity об альтернативном виртуальном каталоге, чтобы он добавлял ко всему префикс /teamcity
?
Или, в качестве альтернативы, есть ли лучший способ разместить TeamCity за IIS 7.5?
решение1
Обновлять:Следующее работает не полностью: часть Javascript проблемная, а перенаправление при выходе из системы не работает.
Параметры:
- Разместите TeamCity в установке Tomcat, которая слушает
/teamcity
; тогда не будет необходимости в исходящих правилах. У меня это работает для установки Drupal. - Вместо этого перенаправить
teamcity.example.com
(виртуального каталога нет). Естьпример шагов для этогов другом месте. Для этого потребуются некоторые DNS CNAME и wildcard-сертификат (если используется HTTPS для внешнего доступа).
Остальные инструкции я оставлю здесь для потомков...
Вы можете настроить URL Rewrite для перезаписи любой части текста, установив filterByTags="None"
.
Итак, теперь у меня есть следующее C:\Inetpub\wwwroot\web.config
:
<configuration>
<system.webServer>
<rewrite>
<rules>
<!-- Anything to http://www.example.com/teamcity/ should be
rewritten to http://teamcity:81/ -->
<rule name="TeamCity (/teamcity)">
<match url="^teamcity/(.*)" />
<serverVariables>
<!-- URL Rewrite can't deal with Encoding: gzip; turn that off. -->
<set name="HTTP_ACCEPT_ENCODING" value="" />
</serverVariables>
<action type="Rewrite"
url="http://teamcity:81/{R:1}" />
</rule>
</rules>
Это входящее правило; существует три исходящих правила:
<outboundRules>
Перенаправления при входе:
<!-- 302 Redirects (for the login page, e.g.) need to be rewritten. -->
<rule name="Teamcity (/teamcity) - Redirect" preCondition="IsRedirect">
<match serverVariable="RESPONSE_LOCATION"
pattern="http://[^/]+/(.*)" />
<action type="Rewrite"
value="http://www.example.com/teamcity/{R:1}" />
</rule>
Обычная перезапись HTML:
<!-- Links in HTML need to be rewritten. -->
<rule name="TeamCity (/teamcity) - HTML" preCondition="IsHTML">
<!-- I've ellided the other tag types here; you might want them. -->
<match filterByTags="A, ..."
pattern="^(.*)" />
<action type="Rewrite"
value="http://www.example.com/teamcity/{R:1}" />
</rule>
@импорт CSS-файлов:
<!-- TeamCity uses @import for styles; fix that. -->
<rule name="TeamCity (/teamcity) - Style" preCondition="IsHTML">
<match filterByTags="None" pattern="@import "/" />
<action type="Rewrite" value="@import "/teamcity/" />
</rule>
И некоторые предварительные условия:
<preConditions>
<preCondition name="IsRedirect">
<add input="{RESPONSE_STATUS}" pattern="302" />
</preCondition>
<preCondition name="IsHTML">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
</system.webServer>
</configuration>
Кажется, это работает, но я вернусь и обновлю этот ответ, если найду что-то еще.