【问题标题】:nginx + uwsgi: -- unavailable modifier requested: 0 --nginx + uwsgi: -- 请求的不可用修饰符: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.

标签: nginx uwsgi ubuntu-12.04


【解决方案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
        

        【讨论】:

          猜你喜欢
          • 2013-09-22
          • 2012-08-20
          • 2021-10-31
          • 2015-12-29
          • 2014-07-15
          • 2016-03-05
          • 1970-01-01
          • 2014-08-03
          相关资源
          最近更新 更多