No meu aplicativo, desejo que o local "/" retorne um arquivo estático index.html, que "/ static" sirva arquivos estáticos de uma pasta e que todas as outras solicitações retornem 404 NOT FOUND. Mais tarde, 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 isso retorna 500 ERRO DE SERVIDOR INTERNO. Parece alias
que não gosta de arquivos únicos. Além disso, eu 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
na verdade, é necessário que você tente mais de um arquivo, que não é o comportamento que estou procurando.
Então, minha pergunta é: como configurar um bloco de localização para sempre retornar um arquivo estático?
Edição: Eu vi de outras respostas que alias
realmente devem aceitar um único arquivo como argumento, então eu tentei:
location = / {
alias /home/tomas/projects/streamcore/static/index_debug.html;
}
Mas ainda recebo apenas 500 ERROS DE SERVIDOR INTERNO. O log de erros para a solicitação "/" diz:
[alert] 28112 # 0: * 7 "/home/tomas/projects/streamcore/static/index_debug.htmlindex.html" não é um diretório
Por que ele está tentando abrir "index_debug.htmlindex.html"? Não estou usando a index
diretiva em lugar nenhum.
fonte
try_files static/index_debug.html static/index_debug.html;
location =/
, recebo 404 NÃO ENCONTRADO, elocation /
recebo 500 ERRO DE SERVIDOR INTERNO.location / { return 404; }
location = / {Index /home/tomas/projects/streamcore/static/index_debug.html;}
Respostas:
Acabei de testar isso e funciona para mim:
O arquivo
/tmp/root/static/index_debug.html
existe, é claro :)Posso acessar qualquer URL e apenas recebo a página estática.
fonte
Você pode usar try_files e um redirecionamento para um local nomeado com reescrita. Como isso:
Se o arquivo existir
/tmp/root
nele, ele será exibido, caso contrário, o uri será reescritostatic/index_debug.html
e será exibido.fonte