python:从 uwsgi 转移到 http-socket

python: moving from uwsgi to http-socket

我正在使用一个 python 应用程序 (modoboa),它曾经通过 uwsgi-protocol 与 uwsgi 一起提供给 nginx。

我现在正在试用 h2o 服务器,它不使用 uwsgi 协议,而是使用 http。

所以我正在尝试将 uwsgi 从使用 uwsgi-socket 迁移到 http-socket,但是 uwsgi 在我现在的位置抛出错误 "no python application found"。

这是我的 nginx.conf:

location /modoboa/ {
        root /usr/local/www/modoboa_default/modoboa_default;
        include uwsgi_params;
        uwsgi_pass unix:/tmp/uwsgi-modoboa.sock;
        uwsgi_param UWSGI_SCRIPT modoboa_default.wsgi:application;
        uwsgi_param UWSGI_SCHEME https;
        uwsgi_param SCRIPT_NAME /modoboa;
        uwsgi_modifier1 30;
    }

这是我的 uwsgi.ini:

[uwsgi]
chdir = /usr/local/www/modoboa_default
module = modoboa_default.wsgi:application
master = true
harakiri = 60
processes = 4
vhost = true
no-default-app = true

这是我现在的uwsgi.ini

[uwsgi]
chdir = /usr/local/www/modoboa_default
module = modoboa_default.wsgi:application
master = true
harakiri = 60
processes = 4
vhost = true
no-default-app = true
http-socket=/tmp/uwsgi-http.sock
enable-threads=true
buffer-size=60000
http-keepalive=3000

我想我的 uwsgi.ini

中遗漏了一些东西

更新

这是我目前所拥有的

h2o.conf

        "/modoboa/":
            proxy.reverse.url: "http://[unix:/tmp/uwsgi-http.sock]/"
            proxy.timeout.keepalive: 1000
            proxy.preserve-host: ON

        "/modoboa/sitestatic/":
            file.dir: /usr/local/www/modoboa_default/sitestatic/

        "/modoboa/media/":
            file.dir: /usr/local/www/modoboa_default/media/

uwsgi.ini

[uwsgi]
chdir = /usr/local/www/modoboa_default
harakiri = 60
processes = 4
http-socket = /tmp/uwsgi-http.sock
enable-threads = true
mount = /modoboa=modoboa_default.wsgi:application
manage-script-name = true

这适用于起始页。 但是,当我登录时,我将被重定向到 example.com/accounts/login/ 而不是 example.com/modoboa/accounts/login/

如果你在 uWSGI 配置中显式设置模块,你应该删除 vhostno-default-app 选项。设置好这些选项后,uWSGI 期望从 HTTP 服务器获取相关信息,但是 H2O 没有设置任何东西。

此外,除非您确切知道它们的用途,否则使用可以发送正确 headers 的服务器设置是不安全的,因此也请从您现有的 nginx 配置中删除它们。您在 uWSGI 配置中设置了 module

我认为您必须在 [uwsgi] 部分中包含以下内容(即 uwsgi.ini 和 nginx.conf 中的相同套接字名称)

socket = /tmp/uwsgi-modoboa.sock

chmod-socket = 644

如果 644 不起作用,请尝试 666 甚至 777(注意共享服务器上广泛开放权限的安全问题)