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
索林2012年

Answers:


109

原始答案

对于Python 2里在Ubuntu 11.10,使用upstart,安装python插件uWSGIapt-get install uwsgi-plugin-python,如果你正在使用INI文件来配置你的uWSGI应用程序,然后添加plugins = python[uwsgi]部分,它应该解决这个问题。

编辑:更新为Python 3和Ubuntu 17.10

对于Python 3的在Ubuntu 17.10,使用systemd,安装python插件uWSGIapt-get install uwsgi-plugin-python3,如果你正在使用INI文件来配置你的uWSGI应用程序,然后添加plugins = python[uwsgi]部分,它应该解决这个问题。

有关python/ uWSGIapp入门的更多信息,包括如何使用ini文件配置它们的信息,请查看此便捷指南


等效的操作(yum插件安装+ uwsgi配置更改)仅在CentOS7上对我有用。
Mike Howsden '17

已经伤了我的头,无法解决此问题。谢谢 !
SuperNova

那高山的linux呢?
亚当·帕金

我不知道“个人uwsgi应用程序配置”的文件在哪里。你可以再详细一点吗?这是我的uwsgi应用的ini文件吗?/ etc / something文件?也许粘贴一下文件内容的样例,这样我知道您指的是什么?文件的典型位置?
杰森

自从我担心这个问题已经过去了很长时间(实际上是7年),但是我确实的意思是uwsgi应用程序的ini文件。您可能会想到,我再也没有任何配置文件了,但是快速的Google搜索产生了这个(貌似)方便的指南。至于ini文件的位置,它实际上可以存在于几乎任何地方。如果您特别喜欢冒险,甚至可以从世界各地的其他Web服务器提供该ini文件,如下所示:uwsgi --ini http://uwsgi.it/configs/myapp.ini
SHaKie

26

通过安装uwsgi-plugin-python3插件并--plugin python3uwsgi启动命令中添加选项来解决


2
请写出更详细的答案,并设置@SHaKie答案所解决的问题
b1_ 2012年

15

我从Ubuntu上的新贵开始了uwsgi。我通过运行来解决了该问题apt-get install uwsgi-plugin-python,然后将其添加plugins=python到/ etc / uwsgi / applications-available中的application.ini中。


8

来自http://uwsgi-docs.readthedocs.org/en/latest/ThingsToKnow.html,“要将请求路由到特定插件,网络服务器需要向uWSGI实例传递一个称为修饰符的魔术数字。默认情况下, number设置为0,即映射到Python。”

我正在为bash脚本使用9,它正在工作。数字及其含义在此页面上: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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.