diretiva de índice nginx não funciona

1

No seguinte trecho de configuração para nginx:

server {
        listen 443;
        listen [::]:433;

        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

        server_name example.com;

        root /var/www/example.com;
        index index.html;
        error_page 502 = @fallback;
        error_page 404 = @not_found;

        location / {
            #try_files /index.html $uri =404; # A
            try_files $uri =404;              # B
        }

        location /service/ {
            rewrite ^/service/(.*)$ /$1 break;

            proxy_set_header X-Load-Balancer "a";
            proxy_set_header X-Real-IP $remote_addr;
            proxy_pass http://127.0.0.100:42424;
        }

        location @fallback {
            try_files /502.html =500;
        }

        location @not_found {
            try_files /404.html =500;
        }
}

Por que A atende corretamente index.html (que está localizado em /var/www/example.com/), mas B não faz e resulta na página 404.html sendo exibida em seu lugar?

    
por Riccardo Bestetti 20.09.2018 / 19:21

1 resposta

1

A diretiva try_files processa cada termo em ordem, até encontrar um arquivo que exista.

Se o arquivo /var/www/example.com/index.html existir, o primeiro termo no caso (A) será sempre bem-sucedido e o URI será alterado internamente para /index.html . A diretiva index não está envolvida. Além disso, caso (A) irá sempre retornar o arquivo /index.html .

No caso (B), try_files está procurando diretórios apenas de arquivos e não . Se você quiser que try_files corresponda a um diretório e o processe com o valor da diretiva index , use um termo com um / à direita. Por exemplo:

try_files $uri $uri/ =404;

Veja este documento para detalhes.

    
por 20.09.2018 / 20:44

Tags