Por que o Nginx está exibindo apenas a marcação do Índice quando eu usá-lo como um proxy reverso para o Nexus 3 Repository Manager?

1

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.

    
por MrRed 13.08.2018 / 14:07

1 resposta

0

Por fim, encontrei este relatório de problemas nas placas Sonexype Nexus: link

Há uma configuração adicional necessária para executar o Nexus em uma porta não padrão que a documentação do Nexus referente à configuração do Nginx omitiu. Em vez de apenas especificar o host na diretiva proxy_set_header no Nginx, você deve especificar a porta também, assim:

proxy_set_header Host $host:$server_port;

Isso funcionou para mim e espero que isso salve alguém mais com alguma dificuldade em configurar o Nginx

    
por 18.09.2018 / 16:08