Почему 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