Estoy intentando poner JetBrains TeamCity (que usa TomCat en el puerto 81) detrás de IIS 7, para quehttp://www.example.com/teamcity/está representado porhttp://miservidor:81/. Creo que lo tengo prácticamente funcionando, excepto que TeamCity genera @import en el <style>
elemento. No sé cómo definir una regla de salida para solucionar esto.
¿Cómo puedo reescribir la URL para solucionar esto?
O, alternativamente, ¿puedo enseñarle a TeamCity sobre el directorio virtual alternativo, para que anteponga todo con /teamcity
?
O, más alternativamente, ¿existe una mejor manera de colocar TeamCity detrás de IIS 7.5?
Respuesta1
Actualizar:Lo siguiente no funciona del todo: parte del Javascript es problemático y la redirección de cierre de sesión no funciona.
Opciones:
- Aloje TeamCity en una instalación de Tomcat que esté escuchando
/teamcity
; entonces no habrá necesidad de reglas de salida. Tengo esto funcionando para una instalación drupal. - Redirigir
teamcity.example.com
en su lugar (sin directorio virtual). Haypasos de ejemplo para estoen otra parte. Esto requerirá algunos CNAME de DNS y un certificado comodín (si usa HTTPS para acceso externo).
Las demás instrucciones las dejo aquí para la posteridad...
Puede configurar URL Rewrite para reescribir cualquier parte del texto configurando filterByTags="None"
.
Entonces ahora tengo lo siguiente en 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>
Esa es la regla entrante; Hay tres reglas de salida:
<outboundRules>
Redirecciones de inicio de sesión:
<!-- 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>
Reescritura HTML normal:
<!-- 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>
@importación de archivos 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>
Y algunas condiciones previas:
<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, pero volveré y actualizaré esta respuesta si encuentro algo más.