1 votes

nginx - sert uniquement avec le backend ou 404, pas de fichiers statiques dans la racine

J'essaie de servir toutes les requêtes avec le backend (uwsgi pour flask dans ce cas) et si le backend n'a pas un tel chemin, nginx devrait renvoyer 404.

D'une manière ou d'une autre, je n'arrive à faire en sorte que le backend prenne le relais que lorsque j'utilise

try_files $uri @uwsgi;

Mais de cette façon, vous pouvez accéder à tous les fichiers du répertoire racine. Je ne veux pas servir tous les fichiers du répertoire racine.

J'ai également essayé ceci :

try_files @uwsgi =404;

Mais j'obtiens alors un 404 même si le chemin est défini dans mon application flask.

Plus de contexte : Ubuntu 14.04, nginx 1.4.6

    location @uwsgi {
            include uwsgi_params;
            uwsgi_pass unix:$document_root/myapp.sock;
    }

    location / {
            try_files $uri @uwsgi;
    }

    location /static/ {
            try_files $uri =404;
    }

L'application flask fonctionne ainsi :

@app.route('/test')
def hello_world():
    return 'Hello World!'

Ainsi, lorsque je visite example.com/test, je veux que le backend flask s'en charge. Mais je ne veux pas que nginx serve tous les fichiers dans le répertoire racine.

1voto

user64786 Points 19

Pourquoi utiliser try_files si vous n'avez jamais de fichiers à essayer et que vous voulez toujours les passer à votre gestionnaire WSGI ? Avez-vous essayé de faire de uwsgi_pass l'emplacement de la racine ?

location / {
    include uwsgi_params;
    uwsgi_pass unix:$document_root/myapp.sock;
}

Vous pouvez le combiner avec un emplacement statique/un nom de serveur statique qui sert des fichiers à partir d'un dossier ordinaire, mais uniquement pour cette URL statique.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X