結論から
CentOS 7ではプログラムごとに/tmp
が別に用意されるらしく、nginxから見える/tmp
とuwsgiから見える/tmp
が違うため、/tmp/uwsgi.sock
がnginxから見つからない、という事態に陥っていた。
→ /run
を使う
→ そのままだと再起動時に/run/app
が削除されるため、永続化する
それぞれの設定
server {
...
location / {
include uwsgi_params;
uwsgi_ignore_client_abort on;
uwsgi_pass unix:///tmp/uwsgi/app.sock -> unix:///run/app/app.sock;
}
}
[uwsgi]
# ...
#socket file's location
socket = /tmp/uwsgi/app.sock -> /run/app/app.sock
uid = app
gid = app
#pid
pidfile = /tmp/uwsgi/app.pid -> /tmp/app/app.pid
#permissions for the socket file
chmod-socket = 666
logto = /var/log/uwsgi/app.log
# ...
/run/uwsgi
ではなく/run/app
にしているのはuwsgi
とは別のユーザーを使いたいから。
sudo mkdir -p /run/app
sudo chown app:app /run/app
#Type Path Mode UID GID Age Argument
d /var/run/app 0755 app app -
参考
python - Got 'No such file or directory' error while configuring nginx and uwsgi - Stack Overflow
nginx unix domain socket error - Server Fault
CentOS 7 : /var/run 直下に作ったディレクトリが消えないようにする - eTuts+ Server Tutorial