Chown(): Произошла недопустимая операция из-за chown-soket uwsgi【nginx】.
Я пытался запустить программу django, используя nginx и uwsgi, но в nginx возникает следующая ошибка.
connect() to unix:/var/www/html/view/dbproject/dbproject.sock failed (13: Permission denied) while connecting to upstream
Я подумал, что эта ошибка, вероятно, вызвана тем, что владельцем dbproject.sock, который создается при запуске uwsgi, является username:username
, а не username:www-data
.
Поэтому я добавил chown-soket = %(username):www-data
в файл инициализации uwsgi uwsgi.ini, но когда я перезапускаю uwsgi, chown(): Operation not permitted
записывается в журнал uwsgi.
Как я могу сделать владельцем сокета %(username):www-data
?
Спасибо.
uwsgi.ini
[uwsgi]
# path to your project
chdir = /var/www/html/view/dbproject
username = myusername
# path to wsgi.py in project
module = dbproject.wsgi:application
master = true
pidfile = /var/www/html/view/dbproject/django.uwsgi.pid
socket = /var/www/html/view/dbproject/dbproject.sock
# http = 127.0.0.1:8000
# path to python virtualvenv
home = /var/www/html/view/myvenv
chown-socket = %(username):www-data
chmod-socket = 660
enable-threads = true
processes = 5
thunder-lock = true
max-requests = 5000
# clear environment on exit
vacuum = true
daemonize = /var/www/html/view/dbproject/django.uwsgi.log
# Django settings
env DJANGO_SETTINGS_MODULE = dbproject.settings
Проблема решена.
Я использовал права root для запуска uwsgi.
Я использовал виртуальную среду Python. Однако пользователь при входе в виртуальную среду не был root
. Поэтому все команды Python, используемые в этой ситуации, являются uid=username, gid=username
. Другими словами, следующая команда uwsgi
и команда chown
, выполненная uwsgi
, также будут выполнены username
.
uwsgi --ini uwsgi.ini
Однако, насколько я знаю, команда chown
вызывает ошибку разрешения, если используется кем-либо, кроме root. Поэтому я думаю, что chown-socket
в файле инициализации uwsgi, который выполнялся командой username
, вызывал ошибку разрешения.
Итак, моя операция выглядит следующим образом
sudo -s # root permission
source myvenv/bin/acitvate # load python venv by root
uwsgi --ini uwsgi.ini # excute uwsgi by root
Меня беспокоит, что uwsgi не будет работать без root из-за проблемы, если это публичная система, но если у вас есть лучшее решение, чем мое, пожалуйста, укажите его.