nginx + uwsgi: - zażądano niedostępnego modyfikatora: 0 -

81

Ubuntu 12.04, nginx 1.2.0, uwsgi 1.0.3.

Uruchamiam uwsgi poleceniem:

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

Na każde żądanie nginx odpowiada za pomocą 502, a uwsgi zapisuje do dziennika następujący wiersz:

-- unavailable modifier requested: 0 --
Lisio
źródło
Na Ubuntu uwsgi jest uruchamiany jako usługa: service uwsgi start.
sorin

Odpowiedzi:

109

Oryginalna odpowiedź

Dla Pythona 2 na Ubuntu 11.10, używając upstart, zainstalować wtyczkę dla Pythona uWSGIz apt-get install uwsgi-plugin-pythona jeśli używasz pliku ini skonfigurować uWSGIaplikację, a następnie dodać plugins = pythondo [uwsgi]sekcji i powinno rozwiązać ten problem.

Edycja: zaktualizowano dla Pythona 3 i Ubuntu 17.10

Dla Python 3 na Ubuntu 17.10, używając systemd, zainstalować wtyczkę dla Pythona uWSGIz apt-get install uwsgi-plugin-python3a jeśli używasz pliku ini skonfigurować uWSGIaplikację, a następnie dodać plugins = pythondo [uwsgi]sekcji i powinno rozwiązać ten problem.

Aby uzyskać więcej informacji na temat rozpoczynania pracy z python/ uWSGIapps, w tym jak je konfigurować za pomocą inipliku, zapoznaj się z tym przydatnym przewodnikiem

SHaKie
źródło
Odpowiednik tego (instalacja wtyczki yum + zmiana konfiguracji uwsgi) właśnie działał u mnie na CentOS7.
Mike Howsden
Łamałem sobie głowę, nie mogąc naprawić tego problemu. Dziękuję Ci !
SuperNova
A co z linuxem alpejskim?
Adam Parkin
Nie wiem, gdzie jest plik „konfiguracji indywidualnej aplikacji uwsgi”. Możesz być bardziej dokładny? Czy to jest plik ini mojej aplikacji uwsgi? Plik / etc / something? Może wkleić próbkę tego, jak wygląda zawartość pliku, żeby wiedzieć, do czego się odnosisz? A typowa lokalizacja pliku?
Jason
Minęło sporo czasu, odkąd musiałem się tym martwić (w rzeczywistości 7 lat), ale rzeczywiście mam na myśli uwsgiplik ini aplikacji. Jak możesz sobie wyobrazić, nie mam już żadnych plików konfiguracyjnych, ale szybkie wyszukiwanie w Google dało ten (pozornie) przydatny przewodnik . Jeśli chodzi o lokalizację pliku ini, może on realistycznie żyć prawie wszędzie. Jeśli czujesz się wyjątkowo odważny, możesz nawet udostępnić ten plik ini z innego serwera internetowego w dowolnym miejscu na świecie, na przykład:uwsgi --ini http://uwsgi.it/configs/myapp.ini
SHaKie
26

Rozwiązany przez zainstalowanie uwsgi-plugin-python3wtyczki i dodanie --plugin python3opcji uwsgiuruchamiania polecenia

Lisio
źródło
2
Napisz obszerną odpowiedź zawierającą więcej szczegółów i ustaw pytanie jako rozwiązane za pomocą odpowiedzi
@SHaKie
15

Rozpoczynam uwsgi od początku na Ubuntu. Rozwiązałem problem, uruchamiając apt-get install uwsgi-plugin-python, a następnie dodając plugins=pythondo pliku application.ini w / etc / uwsgi / applications-available.

shane
źródło
8

z http://uwsgi-docs.readthedocs.org/en/latest/ThingsToKnow.html , „Aby skierować żądania do określonej wtyczki, serwer sieciowy musi przekazać magiczną liczbę zwaną modyfikatorem do instancji uWSGI. Domyślnie liczba jest ustawiona na 0, co jest mapowane na język Python. "

Używam 9 do skryptu bash i działa. liczby i ich znaczenie znajdują się na tej stronie: http://uwsgi-docs.readthedocs.org/en/latest/Protocol.html

w mojej konfiguracji nginx:

location ~ .cgi$ {
    include uwsgi_params;
    uwsgi_modifier1 9;
    uwsgi_pass 127.0.0.1:3031;
}
jcomeau_ictx
źródło
1

Zmodyfikuj swój plik ini, dodając linię wtyczek.

    [uwsgi]
    plugins         = python3
Minhaj Ansari
źródło
0

Używam Ubuntu 18.04 z Pythonem 3. Poniżej znajduje się dokładna konfiguracja, której użyłem do uruchomienia.

Musisz mieć zainstalowaną wtyczkę Python 3 uWSGI:

apt install uwsgi-plugin-python3

Twoja konfiguracja witryny Nginx powinna wskazywać na gniazdo uWSGI. Upewnij się, że port jest zgodny z konfiguracją w dalszych krokach.

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

Załaduj ponownie konfigurację Nginx, aby odzwierciedlić wprowadzone zmiany:

systemctl reload nginx

Do konfiguracji można użyć argumentów wiersza polecenia lub pliku ini. Stworzyłem uwsgi.ini. Upewnij się, że adres gniazda jest zgodny z konfiguracją nginx.

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

Mój app.py ma tylko podstawowy przykład:

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

Teraz uruchom serwer uWSGI z wiersza poleceń:

uwsgi uwsgi.ini
Jordan Mack
źródło