Я пытаюсь использовать uWSGI с nginx. Основная проблема, с которой я столкнулся, заключается в том, что я получаю сообщение «Нет такого файла или каталога» от 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
РЕДАКТИРОВАТЬ
и я попытался переместить файл носка в /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
и получите правильный ответ HTTP от uwsgi / python. Однако в журнале nginx (при попытке зайти через браузер через nginx я получаю: *1 connect() failed (111: Connection refused) while connecting to upstream
Файл nginx настроен так: uwsgi_pass uwsgi://localhost:8000;
Вы не можете поместить сокеты для межпроцессного взаимодействия в /tmp
.
RHEL / CentOS 7, Fedora и т. Д. Используют частные / tmp каталоги, что означает, что каждый настроенный для него демон (в данном случае, по крайней мере, nginx) имеет совершенно другой взгляд на /tmp
чем любой другой.
Чтобы решить эту проблему, поместите сокет в другой каталог или используйте TCP-соединения.
И не слепо audit2allow
вещи, не понимая, что происходит. Скорее всего, вы откроете какую-то дыру в безопасности.