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

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


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


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.


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.