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

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

Ответ 1

Оригинальный ответ

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

Изменение: Обновлено для Python 3 и Ubuntu 17.10

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

Для получения дополнительной информации о начале работы с приложениями python/uWSGI, в том числе о том, как настроить их с помощью ini файла, ознакомьтесь с этим удобным руководством.

Ответ 2

Решено путем установки плагина uwsgi-plugin-python3 и добавления опции --plugin python3 в команду uwsgi start

Ответ 3

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

Ответ 4

из http://uwsgi-docs.readthedocs.org/en/latest/ThingsToKnow.html, "Чтобы направлять запросы к определенному плагину, веб-серверу необходимо передать магическое число, известное как модификатор в экземпляры uWSGI. По умолчанию этот номер установлен в 0, который отображается на Python."

Я использую 9 для bash script, и он работает. номера и их значения на этой странице: 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;
}

Ответ 5

Я использую 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