Dans mon application, je veux que l'emplacement "/" renvoie un fichier index.html statique, je veux que "/ static" serve des fichiers statiques à partir d'un dossier et je veux que toutes les autres demandes renvoient 404 NOT FOUND. Plus tard, je vais rediriger toutes les autres demandes vers un serveur WSGI.
C'est actuellement ma configuration:
# Dev server.
server {
listen 1337;
charset UTF-8;
location / {
rewrite ^ static/index_debug.html break;
}
location /static {
alias /home/tomas/projects/streamcore/static;
}
}
Le dossier statique fonctionne parfaitement, mais "/" renvoie 404 NOT FOUND. J'ai aussi essayé:
alias /home/tomas/projects/streamcore/static/index_debug.html;
Dans le bloc d'emplacement, mais cela renvoie 500 ERREUR DE SERVEUR INTERNE. Il semble que vous alias
n'aimiez pas les fichiers uniques. De plus, j'ai essayé:
try_files static/index_debug.html;
Mais cela empêche le serveur de démarrer avec l'erreur "nombre d'arguments non valide dans la directive try_files". Apparemment, try_files
vous devez en fait essayer plusieurs fichiers, ce qui n'est pas le comportement que je recherche.
Ma question est donc la suivante: comment configurer un bloc d'emplacement pour toujours renvoyer un fichier statique?
EDIT: J'ai vu d'autres réponses qui alias
devraient en effet accepter un seul fichier comme argument, j'ai donc essayé:
location = / {
alias /home/tomas/projects/streamcore/static/index_debug.html;
}
Mais je n'ai toujours que 500 ERREUR DE SERVEUR INTERNE. Le journal des erreurs de la demande "/" indique:
[alerte] 28112 # 0: * 7 "/home/tomas/projects/streamcore/static/index_debug.htmlindex.html" n'est pas un répertoire
Pourquoi essaie-t-il d'ouvrir "index_debug.htmlindex.html"? Je n'utilise la index
directive nulle part.
la source
try_files static/index_debug.html static/index_debug.html;
location =/
404 PAS TROUVÉ,location /
j'obtiens 500 ERREUR DE SERVEUR INTERNE.location / { return 404; }
location = / {Index /home/tomas/projects/streamcore/static/index_debug.html;}
Réponses:
Je viens de tester cela et cela fonctionne pour moi:
Le fichier
/tmp/root/static/index_debug.html
existe bien sûr :)Je peux frapper n'importe quelle URL et j'obtiens juste la page statique.
la source
Vous pouvez utiliser try_files et une redirection vers un emplacement nommé avec réécriture. Comme ça:
Si le fichier existe,
/tmp/root
il sera servi, sinon uri sera réécritstatic/index_debug.html
et il sera servi.la source