nginx + uwsgi: - nicht verfügbarer Modifikator angefordert: 0 -


81

Ubuntu 12.04, nginx 1.2.0, uwsgi 1.0.3.

Ich starte uwsgi mit dem folgenden Befehl:

uwsgi -s 127.0.0.1:9010 -M -t 30 -A 4 -p 4 -d /var/log/uwsgi.log

Auf jede Anfrage antwortet nginx mit 502 und uwsgi schreibt, um die folgende Zeile zu protokollieren:

-- unavailable modifier requested: 0 --

Unter Ubuntu wird uwsgi als Dienst gestartet : service uwsgi start.
— Sorin

Antworten:


109

Ursprüngliche Antwort

Installieren Sie für Python 2 unter Ubuntu 11.10 unter Verwendung upstartdes Python-Plugins uWSGImit apt-get install uwsgi-plugin-pythonund wenn Sie eine INI-Datei zum Konfigurieren Ihrer uWSGIApp verwenden, fügen Sie plugins = pythonsie dem [uwsgi]Abschnitt hinzu, und dieses Problem sollte behoben sein.

Bearbeiten: Aktualisiert für Python 3 und Ubuntu 17.10

Installieren Sie für Python 3 unter Ubuntu 17.10 mit systemddas Python-Plugin für uWSGIwith apt-get install uwsgi-plugin-python3und wenn Sie eine INI-Datei zum Konfigurieren Ihrer uWSGIApp verwenden, fügen Sie plugins = pythonsie dem [uwsgi]Abschnitt hinzu, und dieses Problem sollte behoben sein.

Weitere Informationen zu den ersten Schritten mit python/ uWSGIapps, einschließlich der Konfiguration mithilfe einer iniDatei, finden Sie in dieser praktischen Anleitung


Das Äquivalent dazu (yum plugin install + uwsgi config change) hat gerade für mich unter CentOS7 funktioniert.
— Mike Howsden

Ich habe mir den Kopf gebrochen und konnte dieses Problem nicht beheben. Danke !
— SuperNova

Was ist mit Alpin Linux?
— Adam Parkin

Ich weiß nicht, wo sich die Datei für die "individuelle uwsgi app config" befindet. Könnten Sie genauer sein? Ist das die INI-Datei meiner Uwsgi-App? Die Datei / etc / Something? Fügen Sie vielleicht ein Beispiel ein, wie der Dateiinhalt aussieht, damit ich weiß, worauf Sie sich beziehen? Und ein typischer Speicherort für die Datei?
— Jason

Es ist schon eine Weile her, dass ich mir darüber Sorgen machen musste (tatsächlich 7 Jahre), aber ich meine tatsächlich die uwsgiINI-Datei der App. Wie Sie sich wahrscheinlich vorstellen können, liegen keine Konfigurationsdateien mehr herum, aber eine schnelle Google-Suche ergab diese (scheinbar) praktische Anleitung . Der Speicherort der INI-Datei kann realistisch fast überall leben. Wenn Sie sich besonders abenteuerlustig fühlen, können Sie diese INI-Datei sogar von einem anderen Webserver auf der ganzen Welt aus uwsgi --ini http://uwsgi.it/configs/myapp.ini
— bereitstellen

26

Gelöst durch Installieren des uwsgi-plugin-python3Plugins und Hinzufügen einer --plugin python3Option zum uwsgiStarten des Befehls


2
Bitte schreiben Sie eine breite Antwort mit mehr Details und stellen Sie die Frage so, wie sie mit der @ SHaKie-Antwort gelöst wurde
— b1_

15

Ich starte uwsgi von Anfang an unter Ubuntu. Ich habe das Problem gelöst apt-get install uwsgi-plugin-python, indem plugins=pythonich ausgeführt und dann zu meiner application.ini in / etc / uwsgi / applications-available hinzugefügt habe.


8

von http://uwsgi-docs.readthedocs.org/en/latest/ThingsToKnow.html : "Um Anforderungen an ein bestimmtes Plugin weiterzuleiten, muss der Webserver eine magische Nummer, die als Modifikator bezeichnet wird, an die uWSGI-Instanzen übergeben. Standardmäßig ist dies der Fall Die Nummer ist auf 0 gesetzt, was Python zugeordnet ist. "

Ich benutze 9 für ein Bash-Skript und es funktioniert. Die Zahlen und ihre Bedeutung finden Sie auf dieser Seite: http://uwsgi-docs.readthedocs.org/en/latest/Protocol.html

in meiner Nginx-Konfiguration:

location ~ .cgi$ {
    include uwsgi_params;
    uwsgi_modifier1 9;
    uwsgi_pass 127.0.0.1:3031;
}

0

Ich verwende Ubuntu 18.04 mit Python 3. Nachfolgend finden Sie die genaue Konfiguration, mit der ich es zum Laufen gebracht habe.

Sie müssen das Python 3 uWSGI-Plugin installiert haben:

apt install uwsgi-plugin-python3

Ihre Nginx-Site-Konfiguration sollte auf Ihren uWSGI-Socket verweisen. Stellen Sie in den späteren Schritten sicher, dass der Port mit der Konfiguration übereinstimmt.

    location / {
        uwsgi_pass 127.0.0.1:9090;
        include uwsgi_params;
    }

Laden Sie die Nginx-Konfiguration neu, um die gerade vorgenommenen Änderungen wiederzugeben:

systemctl reload nginx

Sie können Befehlszeilenargumente oder eine INI-Datei zur Konfiguration verwenden. Ich habe geschaffen uwsgi.ini. Stellen Sie sicher, dass die Socket-Adresse mit Ihrer Nginx-Konfiguration übereinstimmt.

[uwsgi]
socket = 127.0.0.1:9090
chdir = /var/www
processes = 4
threads = 2
plugins = python3
wsgi-file = /var/www/app.py

Meine app.py hat nur ein einfaches Beispiel:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/plain')])
    return [b"Hello World!"]

Starten Sie nun den uWSGI-Server über die Befehlszeile:

uwsgi uwsgi.ini
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.