Nginx: / para conteúdo estático e aplicação com proxy

1
  • http://example.com : meu site
  • http://example.net : o backend com proxy

Estou tentando configurar um bloco de servidor nginx como um servidor de conteúdo estático e um proxy reverso. O Nginx deve primeiro verificar arquivos estáticos e, em seguida, redirecionar para o aplicativo em proxy se nenhum arquivo existir. Está configurado como tal:

location @backend {
    proxy_pass http://example.net;
}

location / {
    try_files $uri $uri/ @backend;
}

No entanto, com essa configuração, acessar http://example.com retorna um 403 Forbidden : parece que o nginx tenta veicular uma pasta estática, não encontra um index.html e falha sem usar o proxy example.net . Eu então tenho que adicionar explicitamente uma rota para / :

location = / {
    proxy_pass http://example.net;
}

Dessa forma, http://example.com/ está devidamente protegido por proxy para http://example.net . Mas essa configuração parece estranha: existe uma maneira melhor de proxy / ?

    
por Charles 05.10.2017 / 14:01

1 resposta

2

A cláusula $uri/ está causando o problema.

Se você não precisar que / seja adicionado aos URIs que representam um diretório estático, use:

location / {
    try_files $uri @backend;
}

Como alternativa, sua solução existente também funciona com try_files em vez de duplicar proxy_pass :

location = / {
    try_files $uri @backend;
}

Veja este documento para saber mais.

    
por 05.10.2017 / 15:45