Dans mon application, je souhaite que l'emplacement "/" pour renvoyer un fichier statique index.html, je veux "/ static" de servir des fichiers statiques à partir d'un dossier et je souhaite que toutes les autres demandes de retour 404 non trouvées. À un moment ultérieur, je vais rediriger toutes les autres demandes d'un serveur WSGI.
Ceci 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 "/" retourne 404 non trouvé. J'ai aussi essayé:
alias /home/tomas/projects/streamcore/static/index_debug.html;
Dans le bloc d'emplacement, mais qui renvoie 500 erreurs de serveur internes. Il semble que alias
_ n'aime pas les fichiers simples. De plus, j'ai essayé:
try_files static/index_debug.html;
Mais cela arrête le serveur de commencer par l'erreur "Nombre de virgule non valide dans la directive Try_Files". Apparemment try_files
exige que vous essayiez plus d'un fichier, ce qui n'est pas le comportement que je recherche.
Donc, ma question est la suivante: Comment puis-je configurer un bloc d'emplacement pour toujours renvoyer un fichier statique?
Edit : J'ai vu d'autres réponses que alias
devrait en effet accepter un seul fichier comme argument, alors j'ai essayé:
location = / {
alias /home/tomas/projects/streamcore/static/index_debug.html;
}
Mais je n'ai toujours que 500 erreurs de serveur internes. Le journal d'erreur pour la requête "/" dit:
[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 pas la directive index
n'importe où.
Je viens de tester cela et ça marche pour moi:
server {
root /tmp/root;
server {
listen 8080;
location /static {
try_files $uri =404;
}
location / {
rewrite ^ /static/index_debug.html break;
}
}
}
Le fichier /tmp/root/static/index_debug.html
existe bien sûr :)
Je peux frapper n'importe quelle URL et je viens d'obtenir la page statique.
Vous pouvez utiliser Try_Files et une redirection à un emplacement nommé avec réécriture. Comme ça:
server {
root /tmp/root;
server {
listen 8080;
location / {
try_files $uri $uri/ @index;
}
location @index {
rewrite ^ static/index_debug.html break;
}
}
}
Si le fichier existe dans /tmp/root
Il sera servi, sinon UriR sera réécrit à static/index_debug.html
et ce sera servi.