uWSGI 忽略了 uid、gid 和 chown-socket

uWSGI 忽略了 uid、gid 和 chown-socket

我正在尝试将 uWSGI 与 nginx 结合使用。我遇到的根本问题是,当我尝试连接到 uWSGI 套接字文件时,nginx 提示“没有这样的文件或目录”。

当我使用以下设置时,我期望套接字文件的权限会发生变化。但是,并没有。它继续显示uwsgi:uwsgi

nginx 的错误是*17 connect() to unix:/tmp/myapp.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.1.122, server: , request: "GET / HTTP/1.1", upstream: "uwsgi://unix:/tmp/myapp.sock:", host: "192.168.1.123:81"

myapp.ini (uwsgi)

[uwsgi]
chdir = /var/local/myapp
plugins = python
module = wsgi:app
home = /var/local/virtualenv/myapp
file = main.py
daemonize = /var/log/uwsgi/myapp.log
pidfile = /var/run/uwsgi/myapp.pid
socket = /tmp/%n.sock

chmod-socket = 777
chown-socket = webuser:nginx
uid = webuser
gid = nginx

vacuum = true

文件权限

srwxrwxrwx.  1 uwsgi uwsgi    0 Jul  3 12:43 myapp.sock

myapp.conf(nginx)

server {
    listen 81;

    access_log /var/log/nginx/myapp_access.log;
    error_log /var/log/nginx/myapp_error.log;

    location / {
        try_files $uri @yourapplication;
    }

    location @yourapplication {
        include uwsgi_params;
        uwsgi_pass unix:/tmp/myapp.sock;
    }
}

我也尝试过这个:

usermod -a -G nginx uwsgi
usermod -a -G uwsgi nginx
useradd webuser
usermod -a -G nginx webuser
usermod -a -G uwsgi webuser

我尝试了这个:

grep avc /var/log/audit/audit.log | audit2allow -M nginx
semodule -i nginx.pp

编辑

然后我尝试将 sock 文件移动到/var/run/uwsgi/myapp.sock。在这种情况下,nginx 告诉我:connect() to unix:/var/run/uwsgi/myapp.sock failed (13: Permission denied) while connecting to upstream

编辑2

仅针对 kix,我尝试使用 TCP 端口而不是套接字文件。在这种情况下,我可以使用curl -XGET http://localhost:8000并从 uwsgi/python 获取正确的 HTTP 响应。但是,在 nginx 日志中(当尝试通过浏览器进入 nginx 时,我得到:*1 connect() failed (111: Connection refused) while connecting to upstreamnginx 文件配置如下:uwsgi_pass uwsgi://localhost:8000;

答案1

您不能将用于进程间通信的套接字放入/tmp

RHEL/CentOS 7、Fedora 等,使用私人 /tmp 目录/tmp,这意味着为其配置的每个守护进程(在本例中至少是 nginx)都有与其他守护进程完全不同的视图。

要解决该问题,请将套接字放在另一个目录中或使用 TCP 连接。

audit2allow在没有了解情况的情况下,不要盲目行事。你可能会打开一些安全漏洞。

相关内容