Почему Nginx обслуживает только разметку индекса, когда я использую его в качестве обратного прокси-сервера для Nexus 3 Repository Manager?

Я пытаюсь обслуживать Nexus3 Repo Manager через обратный прокси-сервер Nginx, но он обслуживает только наценку индекса.

Я настроил менеджер репозитория Sonatype Nexus 3 на экземпляре Azure RHEL (SELinux). Я пытался настроить Nginx (на том же экземпляре RHEL) в качестве обратного прокси-сервера (и использовать в качестве конечной точки SSL) для Nexus изначально и для других сервисов в будущем.

Насколько я понимаю, это довольно распространенная установка, поэтому я удивлен, что не могу найти никого с такой же проблемой. (Поэтому я думаю, что я должен делать что-то действительно глупое.)

У меня открыт порт 59906 в Azure и на экземпляре RHEL. Пользовательский интерфейс Nexus работает правильно, когда запускается самостоятельно. Он отображается правильно, когда я просматриваю его на http://nexus.mydomain.com:59906/

Затем я изменяю Nexus на порт 59907 и устанавливаю Nginx для прослушивания на порту 59906 и proxy_pass на localhost:59907. Теперь, если я пытаюсь просмотреть сайт, я получаю 3 разбитых изображения, текст "initializing …" и пустой iframe (кажется, что разметка индекса выполняется должным образом). Когда я смотрю в браузере Инструменты разработчика -> вкладка Сеть, Chrome сообщает, что все ресурсы, кроме исходного домена, не удалось загрузить... MS Edge сообщает, что все ресурсы получили ответ 200 OK, но отображает те же мертвые изображения, текст и пустой iframe. Firefox показывает ресурсы без статуса, но с красной полосой во время загрузки и подсказкой на панели, указывающей, что они заблокированы. Насколько я понимаю, это указывает на то, что в браузере слишком много открытых соединений, и он ждет, пока одно из них не станет бесплатным. Некоторые ресурсы также имеют панель разрешения DNS.

Пользователь nginx является частью группы Nexus, поэтому права доступа не должны быть проблемой. Я включил флаг SE Linux httpd_can_network_connect, чтобы процесс nginx мог подключаться к сокету Nexus.

Все ресурсы имеют базовые URL-адреса: http://nexus.mydomain.com/static/rapture/resources/ что то же самое, когда я запускаю Nexus без прокси Nginx.

Я пытался использовать оба conf.d а также sites-available + sites-enabled методы управления конфигами Nginx. Как вы можете видеть в следующем nginx.conf У меня сейчас conf.d прокомментировал использовать sites-enabled вместо.

nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    index index.html index.htm index.php;

    include       /etc/nginx/mime.types;

    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;

   # include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Это конфиг у меня в sites-available, sites-enabled содержит символическую ссылку на него.

nexus.conf

server {
  listen   *:59906;
  server_name nexus.mydomain.com;

  error_log    /var/log/nginx/error.log debug;

  location / {
    proxy_pass http://localhost:59907/;

    proxy_set_header Host $host;

    proxy_read_timeout 90s;
    proxy_connect_timeout 90s;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host "nexus.mydomain.com";
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}

Nexus.properties выглядит следующим образом:

# Jetty section
application-port=59907
# application-host=127.0.0.1
nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-requestlog.xml
# nexus-context-path=/

# Nexus section
# nexus-edition=nexus-pro-edition
# nexus-features=\
#  nexus-pro-feature

Jetty-http.xml в Nexus это:

  <Call name="addConnector">
    <Arg>
      <New id="httpConnector" class="org.eclipse.jetty.server.ServerConnector">
        <Arg name="server"><Ref refid="Server"/></Arg>
        <Arg name="acceptors" type="int"><Property name="jetty.http.acceptors" default="-1"/></Arg>
        <Arg name="selectors" type="int"><Property name="jetty.http.selectors" default="-1"/></Arg>
        <Arg name="factories">
          <Array type="org.eclipse.jetty.server.ConnectionFactory">

            <!--<Item>
              <New class="org.eclipse.jetty.server.ProxyConnectionFactory"/>
            </Item>-->
            <Item>
              <New class="org.sonatype.nexus.bootstrap.jetty.InstrumentedConnectionFactory">
                <Arg>
                  <New class="org.eclipse.jetty.server.HttpConnectionFactory">
                    <Arg name="config">
                      <Ref refid="httpConfig"/>
                    </Arg>
                  </New>
                </Arg>
              </New>
            </Item>
          </Array>
        </Arg>
        <Set name="host"><Property name="application-host" /></Set>
        <Set name="port"><Property name="application-port"/></Set>
        <Set name="idleTimeout"><Property name="jetty.http.timeout" default="30000"/></Set>
        <Set name="soLingerTime"><Property name="jetty.http.soLingerTime" default="-1"/></Set>
        <Set name="acceptorPriorityDelta"><Property name="jetty.http.acceptorPriorityDelta" default="0"/></Set>
        <Set name="acceptQueueSize"><Property name="jetty.http.acceptQueueSize" default="0"/></Set>
      </New>
    </Arg>
  </Call>

</Configure>

Я попробовал эту конфигурацию с "ProxyConnectionFactory", а также без комментариев.

Я прочитал столько, сколько я могу найти о настройке Nginx в качестве обратного прокси и общей конфигурации, включая:

https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/

https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/

https://www.nginx.com/resources/wiki/start/topics/examples/server_blocks/

https://www.nginx.com/resources/wiki/start/topics/examples/javaservers/

Этот последний дал мне проблеск надежды. Но из того, что я вижу, экземпляр Jetty внутри Nexus не соответствует стандартной настройке.

И я попытался найти ссылку на мою конкретную проблему:

https://groups.google.com/a/glists.sonatype.com/forum/

https://support.sonatype.com/hc/en-us/articles/213464728-Why-is-the-Nexus-user-interface-broken-

https://stackoverflow.com/questions/10075304/nginx-fails-to-load-css-files

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

(и более, но я ограничен 8 ссылками из-за низкой репутации.)

Но, похоже, ничто не указывает на мою конкретную проблему, и ни одно из исправлений не оказало на нее никакого влияния.

Некоторые решения предлагают обслуживать статический контент непосредственно из Nginx, однако мне не удалось найти каталог статических ресурсов в каталогах Nexus, кроме нескольких битов в каталоге / public /, вместе с интерфейсом swagger.

Итак, мой вопрос: кто-нибудь знает, если моя проблема в том, что мне нужно напрямую обслуживать статический контент, и если да, то как мне этого добиться.

ИЛИ ЖЕ

Можете ли вы увидеть некоторые другие проблемы с конфигурацией, из-за которых ресурсы не загружаются.

Спасибо за любые указатели и / или решения.

1 ответ

Решение

В конце концов я нашел этот отчет о проблемах на платах Sonatype Nexus: https://issues.sonatype.org/browse/NEXUS-11603

Существует дополнительная часть конфигурации, необходимая для запуска Nexus на порте не по умолчанию, который в документации Nexus относительно настройки Nginx пропущен. Вместо того, чтобы просто указывать хост в директиве proxy_set_header в Nginx, вы также должны указать порт, например:

proxy_set_header Host $host:$server_port;

Это сработало для меня, и я надеюсь, что это спасет кого-то еще от боли при настройке Nginx

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