Proxy reverso Nginx em locais aninhados

3

Estou usando o Nginx como um proxy reverso para vários aplicativos em vários servidores e estou tentando adicionar diretivas de cache comuns aos arquivos estáticos de cada aplicativo.

Minha configuração original é algo assim:

location /app1{
    ...
    proxy_pass http://127.0.0.1:8081/app1;
}

location /app2{
    ...
    proxy_pass http://127.0.0.1:8082/app2; 
}

...

Para adicionar as diretivas de arquivo estático, posso adicionar um local aninhado a cada local como este:

location /app1{
    ...
    proxy_pass http://127.0.0.1:8081/app1;
    location ~* \.(css|js|ico|gif|jpg|jpeg|png)$ {
        expires 1d;
        ...
        proxy_pass http://127.0.0.1:8081;
    }
}

location /app2{
    ...
    proxy_pass http://127.0.0.1:8082/app2;
    location ~* \.(css|js|ico|gif|jpg|jpeg|png)$ {
        expires 1d;
        ...
        proxy_pass http://127.0.0.1:8082;
    }
}

Como tenho cerca de 30 aplicativos, estou tentando simplificar o código para algo assim:

location /app1{
    ...
    proxy_pass http://127.0.0.1:8081/app1;
    include static_file_config.conf;
}

location /app2{
    ...
    proxy_pass http://127.0.0.1:8081/app2;
    include static_file_config.conf;
}

Existe alguma maneira de simplificar o código para que eu não termine com 30 locais idênticos para arquivos estáticos?

Por favor, note que cada aplicativo serve seus próprios arquivos estáticos.

    
por Jose Antonio 13.02.2015 / 19:09

2 respostas

3

Talvez, em vez de ter muitos locais, você possa usar o regex para corresponder um determinado URI ao aplicativo do desenvolvedor:

location ~ /(app)(\d+) {
   proxy_pass http://127.0.0.1:808$2/$1$2;
   include static_file_config.conf;
}

Você pode ver como isso funciona aqui: link

    
por 13.02.2015 / 22:05
0

Eu tive um problema relacionado, mas o meu estava relacionado a contêineres do Docker e resolvi o seguinte:

server {
   listen       80;
   server_name  some_application_name;
   port_in_redirect off;
   location / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_pass http://localhost:5555;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    location /api {
            rewrite ^/api(.*)$ $1 break;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_pass http://localhost:5000;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

}

O exemplo acima tem um contêiner em execução no 5555 e o .NET Core Api em execução no 5000 e eu não queria alterar as rotas na API do .NET para que a reconfiguração garantisse que a rota estivesse correta para a API funcionar corretamente.

    
por 19.01.2017 / 07:27