发生权限问题是因为uwsgi将/tmp/uwsgi.sock的所有权和权限重置为755,并且每次uwsgi启动时用户都运行uwsgi。
解决问题的正确方法是使uwsgi更改/tmp/uwsgi.sock的所有权和/或权限,以便Nginx可以写入此套接字。因此,有三种可能的解决方案。
uwsgi -s /tmp/uwsgi.sock -w my_app:app --uid www-data --gid www-data
uwsgi -s /tmp/uwsgi.sock -w my_app:app --chown-socket=www-data:www-data
uwsgi -s /tmp/uwsgi.sock -w my_app:app --chmod-socket=666
我更喜欢第一种方法,因为它不会让uwsgi以root身份运行。
前两个命令需要以root用户身份运行。第三个命令不需要以root用户身份运行。
第一个命令使uwsgi以www-data用户身份运行。第二和第三个命令使uwsgi以运行该命令的实际用户身份运行。