Estou tentando colocar o JetBrains TeamCity (que usa TomCat na porta 81) atrás do IIS 7, para quehttp://www.example.com/teamcity/está procurado porhttp://meuservidor:81/. Acho que quase tudo funcionou, exceto que o TeamCity gera @import no <style>
elemento. Não consigo descobrir como definir uma regra de saída para lidar com isso.
Como faço para reescrever o URL para lidar com isso?
Ou, alternativamente, posso ensinar ao TeamCity sobre o diretório virtual alternativo, para que ele prefixe tudo com /teamcity
?
Ou, alternativamente, existe uma maneira melhor de colocar o TeamCity atrás do IIS 7.5?
Responder1
Atualizar:O seguinte não funciona completamente: parte do Javascript é problemática e o redirecionamento de logout está quebrado.
Opções:
- Hospede o TeamCity em uma instalação do Tomcat que esteja escutando
/teamcity
; então não haverá necessidade de regras de saída. Eu tenho isso funcionando para uma instalação drupal. - Em vez disso, redirecione
teamcity.example.com
(sem diretório virtual). Hápassos de exemplo para issoem outro lugar. Isso exigirá alguns CNAMEs DNS e um certificado curinga (se estiver usando HTTPS para acesso externo).
Vou deixar aqui as demais instruções para a posteridade...
Você pode configurar o URL Rewrite para reescrever qualquer parte do texto, configurando filterByTags="None"
.
Então agora tenho o seguinte em 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>
Essa é a regra de entrada; existem três regras de saída:
<outboundRules>
Redirecionamentos de login:
<!-- 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>
Reescrita normal de 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>
@importação de arquivos 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>
E algumas pré-condições:
<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>
Parece funcionar, mas voltarei e atualizarei esta resposta se encontrar mais alguma coisa.