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 из-за проблемы, если это публичная система, но если у вас есть лучшее решение, чем мое, пожалуйста, укажите его.

Вернуться на верх