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