En mi aplicación, quiero que la ubicación "/" devuelva un archivo index.html estático, quiero que "/ static" sirva los archivos estáticos de una carpeta y quiero que todas las demás solicitudes devuelvan 404 NOT FOUND. En un momento posterior, redirigiré todas las demás solicitudes a un servidor WSGI.
Esta es actualmente mi configuración:
# Dev server.
server {
listen 1337;
charset UTF-8;
location / {
rewrite ^ static/index_debug.html break;
}
location /static {
alias /home/tomas/projects/streamcore/static;
}
}
La carpeta estática funciona perfectamente, pero "/" devuelve 404 NOT FOUND. También he intentado:
alias /home/tomas/projects/streamcore/static/index_debug.html;
En el bloque de ubicación, pero eso devuelve 500 ERROR DE SERVIDOR INTERNO. Parece que alias
no le gustan los archivos individuales. Además he intentado:
try_files static/index_debug.html;
Pero eso impide que el servidor comience con el error "número inválido de argumentos en la directiva try_files". Aparentemente, en try_files
realidad requiere que pruebes más de un archivo, que no es el comportamiento que estoy buscando.
Entonces mi pregunta es: ¿cómo configuro un bloque de ubicación para que siempre devuelva un archivo estático?
EDITAR: He visto en otras respuestas que alias
deberían aceptar un solo archivo como argumento, así que intenté:
location = / {
alias /home/tomas/projects/streamcore/static/index_debug.html;
}
Pero todavía solo obtengo 500 ERRORES DE SERVIDOR INTERNO. El registro de errores para la solicitud "/" dice:
[alerta] 28112 # 0: * 7 "/home/tomas/projects/streamcore/static/index_debug.htmlindex.html" no es un directorio
¿Por qué está tratando de abrir "index_debug.htmlindex.html"? No estoy usando la index
directiva en ningún lado.
fuente
try_files static/index_debug.html static/index_debug.html;
location =/
, obtengo 404 NOT FOUND ylocation /
recibo 500 ERROR DE SERVIDOR INTERNO.location / { return 404; }
location = / {Index /home/tomas/projects/streamcore/static/index_debug.html;}
Respuestas:
Acabo de probar esto y funciona para mí:
El archivo
/tmp/root/static/index_debug.html
existe, por supuesto :)Puedo presionar cualquier URL y solo obtengo la página estática.
fuente
Puede usar try_files y una redirección a una ubicación con nombre con rewrite. Me gusta esto:
Si el archivo existe en
/tmp/root
él, se servirá, de lo contrario, se reescribirá uristatic/index_debug.html
y se servirá.fuente