Estou tentando atender um Nexus3 Repo Manager por meio do proxy reverso Nginx, mas ele só serve para a marcação Index.
Eu configurei o gerenciador de repositório Sonatype Nexus 3 em uma instância do Azure RHEL (SELinux). Eu tenho tentado configurar o Nginx (na mesma instância do RHEL) como um proxy reverso (e usar como um ponto final do SSL) para o Nexus inicialmente e para outros serviços no futuro.
Pelo que entendi, essa é uma configuração bem comum, por isso estou surpreso por não conseguir encontrar nenhuma com o mesmo problema. (Portanto, acho que devo estar fazendo algo realmente estúpido.)
Eu tenho a porta 59906 aberta no Azure e na instância RHEL. A interface do usuário do Nexus funciona corretamente quando iniciada por conta própria. É processado corretamente quando eu o visualizo no link
Em seguida, altero o Nexus para a porta 59907 e defino o Nginx para escutar na porta 59906 e proxy_pass para localhost: 59907.
Agora, se eu tentar navegar no site, recebo três imagens quebradas, o texto "inicializando ..." e um iframe vazio (parece que a marcação do índice é exibida como esperado).
Quando eu olho para o navegador Developer Tools - > Na guia Rede, o Chrome informa que todos os recursos, exceto o domínio inicial, não foram carregados ... O MS Edge informa todos os recursos recebeu uma resposta 200 OK, mas exibe as mesmas imagens mortas, texto e iframe vazio.
O Firefox mostra os recursos sem status, mas com uma barra vermelha no tempo de carregamento e uma dica de ferramenta na barra informando que eles estão bloqueados. Pelo que entendi isso indica que o navegador tem muitas conexões abertas e está à espera de um para se tornar livre. Alguns recursos também têm uma barra de resolução de DNS.
O usuário nginx faz parte do grupo nexus, portanto, as permissões não devem ser um problema.
Eu habilitei o sinalizador httpd_can_network_connect do SE Linux para permitir que o processo nginx se conecte ao soquete Nexus.
Todos os recursos têm URLs de base de:
link
que é o mesmo quando eu executo o Nexus sem o proxy do Nginx.
Eu tentei usar as técnicas conf.d
e sites-available
+ sites-enabled
do gerenciamento de configurações do Nginx. Como você pode ver no seguinte: nginx.conf
No momento, tenho conf.d
comentado para usar 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/*;
}
Esta é a configuração que eu tenho em sites-available
, sites-enabled
contém um symlink para ela.
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;
}
}
O nexus.properties do Nexus é assim:
# 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
O jetty-http.xml do Nexus é o seguinte:
<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>
Eu tentei esta configuração com o "ProxyConnectionFactory" não comentada também.
Eu li tanto quanto eu posso encontrar na configuração do Nginx como um proxy reverso e configuração geral, incluindo:
link
link
link
link
Este último me deu um vislumbre de esperança. Mas pelo que consigo ver, a instância do Jetty dentro do Nexus não segue a configuração padrão.
Eu tentei encontrar alguma referência ao meu problema específico:
link
link
link
Proxy reverso do OSS do repositório Nexus
(e mais, mas estou limitado a 8 links devido a baixa reputação)
Mas nada parece referir-se ao meu problema específico e nenhuma das correções teve qualquer efeito sobre ele.
Várias soluções sugerem servir conteúdo estático diretamente do Nginx, no entanto, não consegui encontrar um diretório de recursos estáticos nos diretórios do Nexus além de alguns bits no diretório / public /, junto com uma interface de comparação.
Então minha pergunta é:
Alguém sabe se o meu problema é que eu preciso servir o conteúdo estático diretamente e, em caso afirmativo, como faço para conseguir isso?
OR
Você pode ver algum outro problema de configuração que está fazendo com que os recursos não sejam carregados.
Obrigado por quaisquer sugestões e / ou soluções.