[PYTHON] Configuration pour exécuter l'application dans un sous-répertoire avec nginx + uwsgi

Chose que tu veux faire

Exécutez plusieurs applications dans le même hôte virtuel.

Si vous accédez à http://example.com/app1/hello, vous pouvez accéder à / hello de l'application exécutée sur uwsgi sur localhost.

Notions de base

Comprenez trois variables importantes (probablement de CGI).

REQUEST_URI: /app/hello
SCRIPT_NAME: /app
PATH_INFO: /hello

REQUEST_URI est le chemin après le nom d'hôte auquel l'utilisateur accède. SCRIPT_NAME est l'endroit où l'application est exécutée. CGI a une extension telle que «.cgi» ou php a une extension telle que «.php». PATH_INFO est le chemin après SCRIPT_NAME. Le répartiteur d'URL de l'application verra cette variable.

Si ces trois variables ne sont pas définies correctement, l'envoi et la redirection d'URL ne fonctionneront pas correctement.

nginx + uwsgi

Uwsgi_params, qui est fourni par défaut et peut être utilisé simplement en incluant, ʻUwsgi_param REQUEST_URI $ request_urin'a pas besoin d'être changé tel quel.PATH_INFO est défini sur $ document_uri`, mais vous devez l'écraser de manière appropriée.

Il y a deux façons de définir SCRIPT_NAME et PATH_INFO, l'une est du côté nginx et l'autre du côté uwsgi.

Situé du côté nginx

Cette méthode est recommandée car elle peut être appliquée non seulement à uwsgi mais aussi à d'autres méthodes de proxy inverse telles que http et fastcgi.

nginx.conf


location ~ ^/app/(.*)$ {
    uwsgi_pass unix:/var/run/uwsgi/app.sock;
    include /usr/local/nginx/conf/uwsgi_params;
    uwsgi_param SCRIPT_NAME /app;
    uwsgi_param PATH_INFO /$1;
}

Situé du côté uwsgi

Si vous avez utilisé le montage d'uwsgi pour définir le préfixe de l'application, vous pouvez également utiliser l'option manage-script-name pour définir SCRIPT_NAME et PATH_INFO.

Cette méthode est pratique si vous utilisez mount car l'application elle-même et le script wsgi pour la vérification de l'état sont préparés séparément.

nginx.conf


location ~ ^/app/(.*)$ {
    uwsgi_pass unix:/var/run/uwsgi/app.sock;
    include /usr/local/nginx/conf/uwsgi_params;
}

uwsgi.ini


[uwsgi]
master = true
lazy-apps = true
socket = /var/run/uwsgi/app.sock
workers = 4
mount = /app=wsgi.py
manage-script-name = true

Recommended Posts

Configuration pour exécuter l'application dans un sous-répertoire avec nginx + uwsgi
Comment exécuter des tests avec Python unittest
Pour exécuter gym_torcs avec ubutnu16
[TensorFlow 2 / Keras] Comment exécuter l'apprentissage avec CTC Loss dans Keras
Apprentissage de l'historique pour participer au développement d'applications d'équipe avec Python ~ Créer un environnement Docker / Django / Nginx / MariaDB ~
Je veux utiliser des rails avec des rails même dans un environnement vagabond
exécuter le serveur uwsgi en mode uwsgi-gevent
Comment exécuter du code TensorFlow 1.0 en 2.0
Comment se connecter à Docker + NGINX
Essayez de vous connecter à qiita avec Python
Comment utiliser BigQuery en Python
Créer un environnement Python + uWSGI + Nginx avec Docker
Exécutez une application Web Python avec Docker
Pour faire fonctionner la station d'horodatage en Python
Exécutez des applications Windows (héritées) avec le pilote d'application Windows
Comment afficher dans toute la fenêtre lors de la définition de l'image d'arrière-plan avec tkinter
Comment gérer les fuites de mémoire dans matplotlib.pyplot
Un mémorandum pour faire WebDAV uniquement avec nginx
[REAPER] Comment jouer à Reascript avec Python
Convertissez des PDF en images en masse avec Python
J'ai essayé d'intégrer Keras dans TFv1.1
Comment gérer les erreurs d'exécution dans subprocess.call
Hello World avec nginx + uwsgi + python sur EC2
Étapes pour développer une application Web en Python
Créer un environnement de Nginx + uWSGI + Python (Django) avec docker
Connectez-vous à Yahoo Business avec Selenium Python
Connectez-vous facilement à AWS avec plusieurs comptes
Comment utiliser tkinter avec python dans pyenv
Comment exécuter LeapMotion avec Python non-Apple
Utilisez tkinter pour déplacer le code de sortie en tant que "A et prétendant être B" en python
De l'introduction de Flask sur CentOS au service sur Nginx et uWSGI
Comment utiliser Docker pour conteneuriser votre application et comment utiliser Docker Compose pour exécuter votre application dans un environnement de développement
Que faire si vous exécutez python sur IntelliJ et quittez avec une erreur