Por que essa configuração do Nginx resulta em “reescrita ou ciclo de redirecionamento interno”?

3

Eu tenho a seguinte configuração do Nginx:

server {
  listen   80;
  server_name  mercury;

  access_log  /var/log/nginx/mercury.access.log;
  error_log   /var/log/nginx/mercury.error.log;

  location /static {
    add_header Cache-Control: max-age=31536000;
  }

  location / {
    root   /opt/the-jam/www/dist/;
    try_files $uri /index.html;
    add_header Cache-Control: max-age=60;
  }
}

E eu tenho a estrutura de diretórios:

§ tree /opt/the-jam/www/dist
/opt/the-jam/www/dist
├── index.html
└── static
    ├── 3522b60dabd4468d03f8.css
    └── 3522b60dabd4468d03f8.js

Estou recebendo o erro:

2015/10/20 14:25:26 [error] 4529#0: *95 rewrite or internal redirection cycle while internally redirecting to "/index.html", client: 0.0.0.0, server: the-jam, request: "GET /favicon.ico HTTP/1.1", host: "the-jam.example.com", referrer: "http://the-jam.example.com/"

Este é um aplicativo de página única em que qualquer solicitação, ou seja, /foo/bar/baz deve carregar apenas /index.html , a menos que esteja solicitando algo em /static/[hash].js , então meu entendimento é que a diretiva try_files tentará carregar o arquivo em /foo/bar/baz e depois voltar para /index.html , então por que estou recebendo o ciclo de redirecionamento?

    
por aaron 20.10.2015 / 16:42

1 resposta

5

O problema com a sua configuração é que, se /index.html não puder ser encontrado, ele será redirecionado para /index.html . É melhor evitar essas configurações, mesmo se tiver certeza de que o arquivo está aqui. Uma configuração como essa não tem esse problema:

root /opt/the-jam/www/dist/;

location / {
    try_files $uri /index.html;
    ...
}

location = /index.html {
    # no try_files here
    ...
}

Com essa configuração, você também poderá ver o que há de errado com /index.html e por que não pode ser acessado. Meu melhor palpite é que os direitos de acesso em alguns diretórios intermediários não permitem que o nginx acesse /opt/the-jam/www/dist/index.html .

    
por 20.10.2015 / 17:13

Tags