システムソケットのアクティブ化が最初の要求を処理する準備ができていない理由

システムソケットのアクティブ化が最初の要求を処理する準備ができていない理由

Python仮想環境で実行され、uWSGIとNginxで使用されるFlaskアプリケーションがあります。

アプリケーションの起動を管理するためにsystemdソケットの有効化を使用したいと思います。

関連する構成は次のとおりです。

uwsgi-flask.service

[Unit]
Description=a uWSGI app
After=syslog.target

[Service]
Type=notify
User=www-data
Group=www-data
WorkingDirectory=/home/www-data/my-app
ExecStart=/bin/bash -c "source venv/bin/activate && uwsgi \
          --ini flask-uwsgi.ini \
          --socket /dev/shm/flask.sock"
Restart=always
KillSignal=SIGQUIT
StandardError=syslog
NotifyAccess=all

uwsgi-flask.socket

[Unit]
Description=Socket for uWSGI app

[Socket]
ListenStream=/dev/shm/flask.sock
SocketUser=www-data
SocketGroup=www-data
SocketMode=0660

[Install]
WantedBy=sockets.target

nginx.conf

server {
    listen  80;
    server_name localhost;

    location / {
        root /home/www-data/my-app/public;
        try_files $uri @flask;
    }

    location @flask {
        uwsgi_pass   unix:/dev/shm/flask.sock;
        include      uwsgi_params;
    }
}

systemdソケットを起動して要求をすると:

systemctl start uwsgi-flask.socket

最初の要求は常に次の504応答を受け取ります。

504 Gateway Time-out

しかし、2回目以降の要求は正常です。これは、最初の要求が行われたときにUnixソケットが準備されていないのと同じです。

奇妙なことは、私が始めたときuwsgi-flask.service直接は問題ありません。

systemctl start uwsgi-flask.service

上記の問題の原因は何ですか?

ベストアンサー1

おすすめ記事