Proxy reverso Nginx para Tomcat

1

Eu configurei um servidor Ubuntu 15.10 x64 no DigitalOcean para testar vários aplicativos Java. Eu instalei o Nginx 1.9.3 e o Tomcat8 e estou usando o Nginx como um proxy reverso para encaminhar todos os pedidos para o Tomcat na porta 8080.

Aqui é onde as coisas ficam arriscadas. Estou executando dois aplicativos na minha instalação do tomcat, / webapp1 & / webapp2. Eu quero apontar subdomain.domain.com para / webapp1 e subdomain2.domain.com para / webapp2. No Apache, este é um assunto bastante simples usando o mod_proxy, mas com o Nginx é um pouco mais misterioso.

Até agora, aqui está o que eu tentei em meus sites-ativa / arquivo de domínio.

1ª ronda

server{
   server_name subdomain1.domain.com;
   # ******************SSL configuration ************************
   listen 443 ssl default_server;
   ssl_certificate /etc/nginx/conf/ssl/domain.crt;
   ssl_certificate_key /etc/nginx/conf/ssl/domain.key;
   #*********************************************************************

   #**********Proxy**********************
   location / {

   proxy_redirect off;
   proxy_set_header X-Forwarded-Host $host;
   proxy_set_header X-Forwarded-Server $host;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_pass http://subdomain1.domain.com:8080/webapp1/;
}

As solicitações funcionaram quando acessei o link , mas os links no meu aplicativo que fizeram referência ao caminho do contexto, como / webapp1 / resultaram em um URL que continha dois caminhos de contexto, como o link . Isso causou todos os tipos de referências quebradas, etc.

2ª rodada Eu encontrei um segmento que discutiu um problema semelhante ea correção foi usar uma reescrita para retirar o caminho de contexto extra da url.

server{
       server_name subdomain1.domain.com;
       # ******************SSL configuration ************************
       listen 443 ssl default_server;
       ssl_certificate /etc/nginx/conf/ssl/domain.crt;
       ssl_certificate_key /etc/nginx/conf/ssl/domain.key;
       #*********************************************************************

       #**********Proxy**********************
       location / {

       proxy_redirect off;
       proxy_set_header X-Forwarded-Host $host;
       proxy_set_header X-Forwarded-Server $host;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_pass http://subdomain1.domain.com:8080/webapp1/;
       rewrite ^/webapp1/(.*)$ /$1 last;
    }

Isso resolveu meu problema de um caminho de contexto duplo na URL e funcionará por enquanto, mas estou querendo saber se existe uma solução mais elegante para que uma reescrita não seja necessária. Eu duvido que a reescrita seja cara do ponto de vista dos recursos do servidor, mas há algo que eu não gosto.

Agradeço antecipadamente pelo seu tempo.

    
por clayton rogers 12.03.2016 / 00:34

1 resposta

1

Atualizar

Eu já li sobre configuração de locais. Aqui está outra configuração que resolve o caminho de contexto duplo na url e evita ter que usar uma reescrita. Basicamente, o nginx usa ambas as configurações de localização, então quando o uri tem um caminho de contexto duplo como o link , ele o capta meu segundo bloco de localização e encaminha para o meu servidor tomcat, mas sem o primeiro caminho de contexto. Não tenho certeza se esta ou a solução de reescrita é mais elegante.

     server{
           server_name subdomain1.domain.com;
           # ******************SSL configuration ************************
           listen 443 ssl default_server;
           ssl_certificate /etc/nginx/conf/ssl/domain.crt;
           ssl_certificate_key /etc/nginx/conf/ssl/domain.key;
           #*********************************************************************

           #**********Proxy**********************
           location / {

           proxy_redirect off;
           proxy_set_header X-Forwarded-Host $host;
           proxy_set_header X-Forwarded-Server $host;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_pass http://subdomain1.domain.com:8080/webapp1/;
           #rewrite ^/webapp1/(.*)$ /$1 last;
        }
           location /webapp1/ {

           proxy_redirect off;
           proxy_set_header X-Forwarded-Host $host;
           proxy_set_header X-Forwarded-Server $host;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_pass http://subdomain1.domain.com:8080/webapp1/;
        }
    }
    
por 12.03.2016 / 00:44