nginx + uwsgi: -- 请求的不可用修饰符:0 --

Posted

技术标签:

【中文标题】nginx + uwsgi: -- 请求的不可用修饰符:0 --【英文标题】:nginx + uwsgi: -- unavailable modifier requested: 0 -- 【发布时间】:2012-05-31 15:55:59 【问题描述】:

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. 【参考方案1】:

原答案

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

编辑:针对 Python 3 和 Ubuntu 17.10 更新

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

有关开始使用python/uWSGI 应用程序的更多信息,包括如何使用ini 文件配置它们,请查看这个方便的guide

【讨论】:

相当于这个(yum 插件安装 + uwsgi 配置更改)在 CentOS7 上对我有用。 一直让我头疼,无法解决这个问题。谢谢! alpine linux怎么样? 我不知道“个人 uwsgi 应用程序配置”的文件在哪里。你可以再详细一点吗?这是我的 uwsgi 应用程序的 ini 文件吗? /etc/something 文件?也许粘贴文件内容的示例,以便我知道您指的是什么?以及文件的典型位置? 我不得不担心这个问题已经有一段时间了(实际上是 7 年),但我确实是指 uwsgi 应用程序的 ini 文件。正如您可能想象的那样,我不再有任何配置文件,但快速的谷歌搜索产生了这个(看似)方便的guide。至于 ini 文件的位置,它实际上几乎可以存在于任何地方。如果您特别喜欢冒险,您甚至可以从世界任何地方的另一台 Web 服务器提供该 ini 文件,如下所示:uwsgi --ini http://uwsgi.it/configs/myapp.ini【参考方案2】:

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

【讨论】:

请写出更多详细信息的广泛答案,并将问题设置为使用@SHaKie 答案解决【参考方案3】:

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

【讨论】:

【参考方案4】:

来自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;

【讨论】:

【参考方案5】:

通过添加插件行修改您的 ini 文件。

    [uwsgi]
    plugins         = python3

【讨论】:

【参考方案6】:

我正在使用带有 Python 3 的 Ubuntu 18.04。下面是我用来让它工作的确切配置。

您必须安装 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

【讨论】:

以上是关于nginx + uwsgi: -- 请求的不可用修饰符:0 --的主要内容,如果未能解决你的问题,请参考以下文章

使用 uwsgi + nginx 资源暂时不可用

转载nginx+uwsgi+django

当 uWSGI 处理请求需要很长时间时 Nginx 超时

nginx和uwsgi的区别和作用

Django+Nginx+uWSGI部署

Django + uWSGI + Nginx + SSL - 工作配置请求(强调 SSL)