[PYTHON] Einstellung zum Ausführen der Anwendung im Unterverzeichnis mit nginx + uwsgi

Was du machen willst

Führen Sie mehrere Anwendungen in demselben virtuellen Host aus.

Wenn Sie auf http://example.com/app1/hello zugreifen, können Sie zu / hello der App springen, die auf uwsgi auf localhost ausgeführt wird.

Grundwissen

Verstehen Sie drei wichtige Variablen (wahrscheinlich von CGI).

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

REQUEST_URI ist der Pfad nach dem Hostnamen, auf den der Benutzer zugreift. In SCRIPT_NAME wird die App ausgeführt. CGI hat eine Erweiterung wie ".cgi" oder PHP hat eine Erweiterung wie ".php". PATH_INFO ist der Pfad nach SCRIPT_NAME. Der URL-Dispatcher der App sieht diese Variable.

Wenn diese drei Variablen nicht richtig eingestellt sind, funktionieren URL-Versand und -Umleitung nicht richtig.

nginx + uwsgi

Uwsgi_params, das standardmäßig bereitgestellt wird und nur durch Einschließen verwendet werden kann, Der Text uwsgi_param REQUEST_URI $ request_uri muss nicht geändert werden. PATH_INFO ist auf $ document_uri gesetzt, aber Sie müssen es entsprechend überschreiben.

Es gibt zwei Möglichkeiten, SCRIPT_NAME und PATH_INFO festzulegen: eine befindet sich auf der Nginx-Seite und die andere auf der Uwsgi-Seite.

Auf der Nginx-Seite einstellen

Diese Methode wird empfohlen, da sie nicht nur auf uwsgi, sondern auch auf andere Reverse-Proxy-Methoden wie http und fastcgi angewendet werden kann.

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;
}

Set auf der Uwsgi-Seite

Wenn Sie das Anwendungspräfix mit uwsgis mount festgelegt haben, können Sie auch die Option "Verwaltungsskriptname" verwenden, um SCRIPT_NAME und PATH_INFO festzulegen.

Diese Methode ist praktisch, wenn Sie mount verwenden, z. B. um die App selbst und das wsgi-Skript separat für die Integritätsprüfung vorzubereiten.

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

Einstellung zum Ausführen der Anwendung im Unterverzeichnis mit nginx + uwsgi
So führen Sie Tests zusammen mit Python unittest aus
Um gym_torcs mit ubutnu16 auszuführen
[TensorFlow 2 / Keras] Ausführen des Lernens mit CTC Loss in Keras
Lernverlauf zur Teilnahme an der Entwicklung von Teamanwendungen mit Python ~ Build Docker / Django / Nginx / MariaDB-Umgebung ~
Ich möchte Rails mit Rails auch in einer vagabundierenden Umgebung betreiben
Führen Sie den uwsgi-Server im uwsgi-gevent-Modus aus
So führen Sie TensorFlow 1.0-Code in 2.0 aus
So melden Sie sich bei Docker + NGINX an
Versuchen Sie, sich mit Python bei qiita anzumelden
So arbeiten Sie mit BigQuery in Python
Erstellen Sie mit Docker eine Python + uWSGI + Nginx-Umgebung
Führen Sie eine Python-Webanwendung mit Docker aus
So betreiben Sie die Zeitstempelstation in Python
Führen Sie (ältere) Windows-Apps mit dem Windows-Anwendungstreiber aus
So zeigen Sie im gesamten Fenster an, wenn Sie das Hintergrundbild mit tkinter einstellen
Umgang mit Speicherlecks in matplotlib.pyplot
Ein Memorandum, um WebDAV nur mit Nginx zu erstellen
[REAPER] Wie man Reascript mit Python spielt
Konvertieren Sie PDFs mit Python in Massenbilder
Ich habe versucht, Keras in TFv1.1 zu integrieren
Umgang mit Laufzeitfehlern in subprocess.call
Hallo Welt mit Nginx + Uwsgi + Python auf EC2
Schritte zum Entwickeln einer Webanwendung in Python
Erstellen Sie mit Docker eine Umgebung aus Nginx + uWSGI + Python (Django)
Melden Sie sich mit Selenium Python bei Yahoo Business an
Melden Sie sich einfach mit mehreren Konten bei AWS an
Wie man tkinter mit Python in Pyenv benutzt
So führen Sie LeapMotion mit Nicht-Apple Python aus
Verwenden Sie tkinter, um den Ausgabecode in Python als "A und vorgeben, B zu sein" zu verschieben
Von der Einführung von Flask unter CentOS bis zum Service unter Nginx und uWSGI
Verwendung von Docker zum Containerisieren Ihrer Anwendung und Verwenden von Docker Compose zum Ausführen Ihrer Anwendung in einer Entwicklungsumgebung
Was tun, wenn Sie Python auf IntelliJ ausführen und mit einem Fehler beenden?