我试图用nginx来使用uWSGI。 我遇到的根本问题是,我从nginx尝试连接到uWSGI套接字文件中得到“没有这样的文件或目录”。
当我使用下面的设置时,我期待套接字文件的权限改变。 但是,他们不是。 它继续显示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 upstream
nginx文件configuration是这样的: uwsgi_pass uwsgi://localhost:8000;
您不能在/tmp
插入进程间通信的套接字。
RHEL / CentOS 7,Fedora等使用私有/ tmp目录 ,这意味着为它configuration的每个守护进程(在本例中至less为nginx)与其他任何/tmp
完全不同。
要解决此问题,请将套接字放在另一个目录中或使用TCP连接。
不要盲目audit2allow
事情,不知道发生了什么事情。 你可能会打开一些安全漏洞。