nginx proxy_pass configuração do curinga

2

Eu tenho uma configuração do apache assim:

<VirtualHost *:80>
    ProxyPass /app http://localhost:8080/app
    ProxyPassReverse /app http://localhost:8080/app
    ProxyPass /images http://localhost:8080/app/images
    ProxyPassReverse /images http://localhost:8080/app/images
</VirtualHost>

Estou tentando traduzir isso para a configuração nginx. Até agora eu tenho

server {
    listen       80;
    server_name  localhost;

    location /app {
        proxy_set_header X-Forwarded-Host $host:$server_port;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://localhost:8080/app;
    }

    location /app/images {
        proxy_set_header X-Forwarded-Host $host:$server_port;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://localhost:8080/app/images;
    }
    ...
}

Isso é muita repetição. Por favor, ajude-me a descobrir como ter apenas um local que possa lidar com todos os sub-caminhos também. Além disso, gostaria de não ativar nenhum sub-caminho (curinga), mas um conjunto de caminhos conhecidos. Digamos que eu queira ativar localhost/app , localhost/app/images e nenhum outro. Assim como acima, mas mais curto. Isso é possível?

    
por akonsu 14.05.2017 / 07:24

2 respostas

0

O nginx permite ter regexp para a localização correspondente, supondo que você possa precisar de index.html . Caso contrário, basta removê-lo.

server {
    listen       80;
    server_name  localhost;

    location ~ ^/app/(index.html|images)? {
        proxy_set_header X-Forwarded-Host $host:$server_port;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://localhost:8080;
    }
    ...
}
    
por 14.05.2017 / 08:41
0

Você pode simplesmente usar um bloco location assim:

location /app {
    proxy_set_header X-Forwarded-Host $host:$server_port;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://localhost:8080;
}

Quando o proxy_pass não contém nenhum componente do caminho, o nginx anexará o URI normalizado da solicitação à parte do host da diretiva proxy_pass .

    
por 14.05.2017 / 08:43

Tags