1. トラブルの内容
AWS EC2上にDjangoRestFrameworkアプリケーションを構築したのですが、その際に.sockファイルを誤って消去してしまいリバースプロキシがワークしなくなってしまいました。
gunicornを再起動すれば.sockファイルは自動生成されるはず・・・が、手間取ってしまったのでメモ。
2. 開発環境
[環境]
EC2 Amazon linux 2023
nginx 1.24.0
gunicorn 20.0.4
[ファイル構成]
/etc/nginx/nginx.conf
/etc/nginx/conf.d/[PROJECT_NAME].conf
/etc/systemd/system/gunicorn.service
/etc/systemd/system/gunicorn.socket
※下の2つのファイルは[任意の名前].serviceと[任意の名前].socketのファイルです。
3. 実際のトラブルシューティング
消してしまわないところに.sockファイルを置くように設定するのがまず第一と考え、homeフォルダ直下にgunicorn-sockディレクトリを作成し、その中に.sockを作成する設定にしました。
[Unit]
・・・
[Socket]
# sockファイルを作る場所を絶対パスで指定
ListenStream=/home/ec2-user/gunicorn-sock/[PROJECT_NAME].sock #変更
・・・
[Install]
・・・
server {
listen 80;
server_name [サーバのIPアドレス];
location / {
proxy_pass http://unix:/home/ec2-user/gunicorn-sock/[PROJECT_NAME].sock; #変更
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
これで再起動すれば、、、
$ sudo systemctl restart gunicorn.service
4. 解決法
gunicornの再起動前にgunicorn.socketを再起動する必要がありました。
$ sudo systemctl start gunicorn.socket
$ sudo systemctl start gunicorn
5. まとめ
nginxとgunicornのリバースプロキシ設定の際に、.socketファイルを再起動するのを忘れないようにというpitfallでした。