Proxy reverso Nginx é reescrito para ocultar o nome do aplicativo

1

Esta pergunta pode ser feita muitas vezes, eu tenho lido, mas ainda não consigo o que eu quero.

Eu tenho um aplicativo em execução em http://172.17.1.10:8080/myapp Gostaria de configurar o proxy reverso nginx acessando o aplicativo usando http://sub.domain.com apenas, ocultando "myapp" na barra de endereço.

Minha configuração atual é:

server{
        listen 80;
        server_name sub.domain.com;
        location /myapp {
                rewrite ^/myapp(.*) /$1 break;
                proxy_pass http://172.17.1.10:8080;
                proxy_redirect off;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP      $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                include /etc/nginx/proxy_params;
        }

}

Mas continuo visualizando a página de índice do Nginx com http://sub.domain.com e http://sub.domain.com/myapp da página de índice do tomcat. O que estou perdendo?

    
por Yichaoz 07.12.2014 / 04:43

2 respostas

1

Quando você altera o conteúdo do URI que está sendo processado em um bloco de localização que contém uma diretiva proxy_pass, você precisa manipular Location de reescrita do cabeçalho com proxy_redirect:

In some cases, the part of a request URI to be replaced cannot be determined:

  • When location is specified using a regular expression. In this case, the directive should be specified without a URI.

  • When the URI is changed inside a proxied location using the rewrite directive, and this same configuration will be used to process a request (break).

Mas, no seu caso, não há razão para usar uma reescrita porque o nginx já lida com isso na diretiva proxy_pass ao adicionar um prefixo de URI:

If the proxy_pass directive is specified with a URI, then when a request is passed to the server, the part of a normalized request URI matching the location is replaced by a URI specified in the directive.

Além disso, você precisa remover a diretiva proxy_redirect para que o nginx possa reescrever Location headers usando o prefixo URI proxy_pass como padrão e o prefixo de local como substituto.

Então, simplesmente use isso:

server {

    server_name sub.domain.com;

    location / {
            proxy_pass http://172.17.1.10:8080/myapp/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            include /etc/nginx/proxy_params;
    }

}
    
por 07.12.2014 / 20:00
1

Altere estas três linhas para corrigir você:

location /myapp {
            rewrite ^/myapp(.*) /$1 break;
            proxy_pass http://172.17.1.10:8080;

Para:

location / {
            proxy_pass http://172.17.1.10:8080/myapp;
    
por 07.12.2014 / 05:29

Tags