Como eu configuro um bloco de localização para sempre retornar um único arquivo no nginx?

9

No meu aplicativo, quero que o local "/" retorne um arquivo index.html estático, desejo que "/ static" exiba arquivos estáticos de uma pasta e desejo que todos os outros pedidos retornem 404 NOT FOUND. Posteriormente, redirecionarei todas as outras solicitações para um servidor WSGI.

Esta é atualmente minha configuração:

# Dev server.
server {
    listen 1337;
    charset UTF-8;

    location / {
        rewrite ^ static/index_debug.html break;
    }

    location /static {
        alias /home/tomas/projects/streamcore/static;
    }
}

A pasta estática está funcionando perfeitamente, mas "/" está retornando 404 NOT FOUND. Eu também tentei:

alias /home/tomas/projects/streamcore/static/index_debug.html;

No bloco de localização, mas que retorna 500 INTERNAL SERVER ERROR. Parece que alias não gosta de arquivos únicos. Além disso, tentei:

try_files static/index_debug.html;

Mas isso impede que o servidor inicie com o erro "número inválido de argumentos na diretiva try_files". Aparentemente try_files requer que você experimente mais de um arquivo, o que não é o comportamento que estou procurando.

Então, minha pergunta é: Como posso configurar um bloco de localização para sempre retornar um arquivo estático?

EDIT: eu vi de outras respostas que alias deveria aceitar um único arquivo como argumento, então eu tentei:

location = / {
    alias /home/tomas/projects/streamcore/static/index_debug.html;
}

Mas eu ainda só recebo 500 INTERRAL SERVER ERROR. O log de erro da solicitação "/" diz:

[alert] 28112#0: *7 "/home/tomas/projects/streamcore/static/index_debug.htmlindex.html" is not a directory

Por que está tentando abrir "index_debug.htmlindex.html"? Não estou usando a diretiva index em nenhum lugar.

    
por Hubro 06.02.2013 / 22:51

1 resposta

8

Testei isso e funciona para mim:

server {
    root /tmp/root;
    server {
        listen 8080;
        location /static {
            try_files $uri =404;
        }
        location / {
            rewrite ^ /static/index_debug.html break;
        }
    }
}

O arquivo /tmp/root/static/index_debug.html existe, é claro:)

Eu posso acessar qualquer URL e acabei de obter a página estática.

    
por 07.02.2013 / 23:19