nginx + uwsgi: - запрошений недоступний модифікатор: 0 -


81

Ubuntu 12.04, nginx 1.2.0, uwsgi 1.0.3.

Я починаю uwsgi з такою командою:

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

На кожен запит nginx відповідає 502, а uwsgi пише для реєстрації наступний рядок:

-- unavailable modifier requested: 0 --

В Ubuntu uwsgi запускається як служба: service uwsgi start.
сорін

Відповіді:


109

Оригінальна відповідь

Для Python 2 на Ubuntu 11.10, використовуючи upstart, встановіть плагін python для uWSGIwith, apt-get install uwsgi-plugin-pythonі якщо ви використовуєте файл ini для налаштування своєї uWSGIпрограми, додайте plugins = pythonдо [uwsgi]розділу, і він повинен вирішити цю проблему.

Редагувати: оновлено для Python 3 та Ubuntu 17.10

Для Python 3 на Ubuntu 17.10, використовуючи systemd, встановіть плагін python для uWSGIwith, apt-get install uwsgi-plugin-python3і якщо ви використовуєте файл ini для налаштування своєї uWSGIпрограми, додайте plugins = pythonдо [uwsgi]розділу, і він повинен вирішити цю проблему.

Для отримання додаткової інформації про початок роботи з python/ uWSGIapps, зокрема про те, як їх налаштувати за допомогою iniфайлу, перегляньте цей зручний посібник


Еквівалент цього (установка плагіна yum + зміна конфігурації uwsgi) щойно працював у мене на CentOS7.
Mike Howsden

Ламаю собі голову, не може вирішити цю проблему. Дякую !
SuperNova

А як щодо альпійського Linux?
Адам Паркін

Я не знаю, де знаходиться файл для "індивідуальної конфігурації програми uwsgi". Чи можете ви бути більш конкретними? Це файл ini мого додатка uwsgi? Файл / etc / something? Можливо, вставте зразок того, як виглядає вміст файлу, щоб я знав, на що ви маєте на увазі? А типове місце для файлу?
Джейсон

Минуло досить багато часу з того часу, як мені довелося про це турбуватися (насправді 7 років), але я справді маю на увазі uwsgiфайл ini програми. Як ви, напевно, можете собі уявити, у мене більше немає конфігураційних файлів, але швидкий пошук у Google створив це (здавалося б) зручне керівництво . Що стосується розташування файлу ini, він може реально жити майже де завгодно. Якщо ви відчували себе особливо авантюрно, ви могли б навіть подати цей файл ini з іншого веб-сервера в будь-якій точці світу, наприклад так:uwsgi --ini http://uwsgi.it/configs/myapp.ini
SHaKie

26

Вирішено шляхом встановлення uwsgi-plugin-python3плагіна та додавання --plugin python3опції до uwsgiкоманди start


2
Будь ласка, напишіть широку відповідь із більш детальною інформацією та поставте запитання, як вирішено за допомогою відповіді
@SHaKie

15

Я запускаю uwsgi з вискочки на Ubuntu. Я вирішив проблему, запустивши apt-get install uwsgi-plugin-python, а потім додавши plugins=pythonдо свого application.ini в / etc / uwsgi / applications-available.


8

з http://uwsgi-docs.readthedocs.org/en/latest/ThingsToKnow.html , "Щоб маршрутизувати запити до певного плагіна, веб-сервер повинен передавати магічне число, відоме як модифікатор, до екземплярів uWSGI. За замовчуванням це число встановлено на 0, яке відображається на Python. "

Я використовую 9 для скрипта bash, і він працює. цифри та їх значення знаходяться на цій сторінці: http://uwsgi-docs.readthedocs.org/en/latest/Protocol.html

у моїй конфігурації nginx:

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


0

Я використовую Ubuntu 18.04 з Python 3. Нижче наведено точну конфігурацію, яку я використовував для роботи.

У вас повинен бути встановлений плагін Python 3 uWSGI:

apt install uwsgi-plugin-python3

Ваша конфігурація сайту Nginx повинна вказувати на ваш сокет uWSGI. Переконайтеся, що порт відповідає конфігурації на наступних кроках.

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

Перезавантажте конфігурацію Nginx, щоб відобразити щойно внесені зміни:

systemctl reload nginx

Для конфігурації можна використовувати аргументи командного рядка або файл ini. Я створив uwsgi.ini. Переконайтесь, що адреса сокета відповідає вашій конфігурації nginx.

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

Мій app.py має лише основний приклад:

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

Тепер запустіть сервер uWSGI з командного рядка:

uwsgi uwsgi.ini
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.