Nexus Repository OSS обратный прокси

У меня есть сервер Windows Server 2012-R2, на котором работает Nexus Repository OSS localhost:8081, Я настроил обратный прокси-сервер в IIS со следующим правилом:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://localhost:8081/{R:1}" />
                </rule>
            </rules>
            <outboundRules>
                <preConditions>
                    <preCondition name="ResponseIsHtml1">
                        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                    </preCondition>
                </preConditions>
            </outboundRules>
        </rewrite>
    </system.webServer>
</configuration>

Когда я захожу на сайт из другой системы и перехожу на nexus.mycompany.com, я вижу работающий прокси... в основном. Все зависимые CSS, JS и т. Д. Все localhost:8081 что, конечно, удаленная машина не может разрешить.

Я попытался добавить исходящее правило, надеясь, что это решит проблему, но не сделал этого.

 <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">
                        <match filterByTags="A, Form, Img" pattern="^http(s)?://localhost:8081/(.*)" />
                        <action type="Rewrite" value="http{R:1}://nexus.mycompany.com/{R:2}" />
 </rule>

Глядя на документацию, я попытался установить базовый URL. Описанная кнопка не отображается в графическом интерфейсе. Я нашел статью переполнения стека, объясняющую, что она была перемещена в раздел "Возможности". Я добавил базовый URL через возможности, и он все еще не работает.

Я перезапустил службу Windows после каждого изменения.

Я хочу сделать, чтобы хранилище было доступно через имя хоста и чтобы оно загружалось соответствующим образом. Я что-то упускаю здесь очевидное? Есть ли какая-то другая причина, почему он использует полные URL-адреса вместо относительных URL-адресов?

1 ответ

Решение

В настройке обратного прокси, Nexus ищет наличие различных X-Forwarded-* Заголовки HTTP для определения его базового URL. Если вы правильно установили эти заголовки, он должен выдавать правильные URL-адреса, без исходящих правил.

Хитрость заключается в том, чтобы узнать, какие из них нужно пройти - документация об обратном прокси-сервере не кажется особенно ясной в отношении того, что это такое, они просто предлагают образцы nginx и Apache без особых объяснений. Я подозреваю, что nginx и Apache автоматически устанавливают необходимые заголовки, и Nexus принял их. Это все "стандарт де-факто", а не формальный, поэтому, хотя вы видите достаточную согласованность, в которой заголовки поддерживаются в разных приложениях, это не гарантируется.

Вот два, которые мне нужны в моем случае:

  • X-Forwarded-Host сообщает Nexus исходный хост, запрошенный клиентом. Это будет "nexus.mycompany.com" в вашем примере.
  • X-Forwarded-Proto может использоваться, чтобы сообщить Nexus, что исходный запрос (т. е. к вашему прокси) был HTTPS, даже если сам Nexus не запускает HTTPS. Если ваш прокси не HTTPS, то вам это не нужно.

Заголовки задаются в разделе "Переменные сервера" - замените тире подчеркиванием и добавьте "HTTP_" на лицевой стороне, X-Forwarded-Host становится HTTP_X_Forwarded_Host,

Таким образом, правило будет выглядеть так:

<rule name="ReverseProxyInboundRule1" stopProcessing="true">
    <match url="(.*)" />
    <action type="Rewrite" url="http://localhost:8081/{R:1}" />
    <serverVariables>
        <set name="HTTP_X_Forwarded_Proto" value="https" />
        <set name="HTTP_X_Forwarded_Host" value="nexus.mycompany.com" />
    </serverVariables>
</rule>

Опять же, возьмите Proto, если ваш обратный прокси-сервер не HTTPS.

Когда эти заголовки установлены, вам не нужно исходящее правило, которое, как вы заметили, не в состоянии уловить многое из того, что происходит в файлах Javascript.

В заключение, возможно, вы захотите оставить эту возможность Base URL там - в соответствии с документами, которые она использует для нескольких вещей.

Другие вопросы по тегам