通过IIS反向代理通过https设置YouTrack

时间:2018-04-02 07:25:28

标签: ssl iis https reverse-proxy youtrack

我正在努力设置YouTrack,以及JetBrains服务TeamCity,Hub和UpSource,通过IIS反向代理运行https。

我已按详细in the documentation进行操作,但我没有取得任何成功,尽管尝试了各种变体,但我还是找不到成功的。

目前,我们在服务器上安装了YouTrack,如:http://server.company.com:8080/issues

我正试图通过以下网址开始工作:https://server.company.com/youtrack/

我已经设法在同一台服务器(https://server.company.com/octopus/ - > http://server.company.com:8888/octopus)上为OctopusDeploy设置了几乎相同的URL Rewrite,所以我知道它至少在理论上是可行的。通过扩展,我知道问题必须与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重写时发生,从而导致默认操作&#34;反向代理到协作常规& #34;启动(我必须添加它以使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下的空白页面。

我还尝试了以下变体,尾随&#34; /&#34;在&#34; oauth&#34;:

之后
            <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

在这一点上,我几乎完全在我的智慧结束。我已经尝试了所有我能想到的东西,但仍然没有向解决方案迈进一步。我知道有一个事实是可以在https下运行YouTrack,因为JetBrains问题跟踪器本身正在这样做(https://youtrack.jetbrains.com),但我无法弄清楚如何让它为我们工作。 / p>

有没有人有任何想法我怎么解决这个问题?任何指针或建议都会在这一点上受到高度赞赏。

2018年4月4日更新

我已经取得了一些进展,但它仍然没有完全奏效。

YouTrack的客户支持员工向我指出基本网址和重定向网址需要在同一条路径上结束,所以我在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版本,然后陷入无限循环,每次登录尝试都会重定向到登录页面。

2 个答案:

答案 0 :(得分:1)

请将YouTrack(https://www.jetbrains.com/help/youtrack/standalone/Reverse-Proxy-Configuration.html#Change_Base_URL)和Hub(https://www.jetbrains.com/help/hub/Proxy-Configuration.html#change-baseurl-zip-msi)的基本URL从http更改为https,然后重新启动这两项服务。 请解决重定向问题。如果没有,请尝试清理浏览器缓存并再次检查。 如果有帮助,请告诉我。

答案 1 :(得分:1)

好的,所以我想出了如何做到这一点。 Ana的答案几乎是正确的,但它没有最后一个关键步骤:重新配置YouTrack的hub-url参数以匹配新的Hub URL。

注意:所有以hub.bat开头的命令都需要在hub.bat中的[Hub Installation Directory]\bin文件上执行,所有以youtrack.bat开头的命令都需要在{youtrack.bat上执行1}}文件[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,这就是为什么YouTrack的hub-url设置以/hub/hub结尾。

之后,我需要做的就是将重定向URL添加到Hub中的YouTrack允许的重定向URL列表中。设置&gt;服务&gt; YouTrack,现在它完美无缺。