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.