Django + nginx + gunicorn接続時の502 Bad Gatewayエラーについて
解決したいこと
AWSのubuntu環境上でdjango+nginx+gunicornにより作成したページに接続すると"502 Bad Gateway"が表示される。
詳細
django, nginx, gunicornでwebアプリを公開する練習を行っています。
AWSのubuntu環境でdjangoアプリが問題なく起動し繋がることは確認できましたが、その後nginxとgunicornを用いた接続を行った際,"502 Bad Gateway"の表示が現れ作成したページは表示されません。
下記ページを参考に作成を進め(ほぼqiita記事の通り)、qiita記事手順9のAWSにデプロイしwebページを表示するところまでは完了しております。
恐らく、nginxの設定ファイルに問題があると考えております。
見よう見まねで書いており、理解できていない部分も多いですが、django+nginx+gunicornの解説サイトは一通り目を通し、設定ファイルの記載方法に問題はないと思っており、単純にパスが悪いのかと考えております。
ただパスも間違っている箇所が見つからず数日作業が進んでいないため進んでいないため質問させていただきました。
(下記アドレスなど隠した方がよさそうな箇所は書き換えております。)
発生している問題・エラー
該当するソースコード
nginx設定ファイル(ファイル名:gmail)
server {
listen 80;
server_name <パブリックIPアドレス>;
# ファビコンが見つからないというエラーを回避するおまじない
location = /favicon.ico {access_log off; log_not_found off;}
### 以下、リクエストURLとNGINX上のパスとの対応を定義
# Django静的ファイルへのパスを設定
location /static/ {
root /home/ubuntu/django-gmail-local/gmail;
}
# 管理者用ページのCSSを表示するためのパスを設定
#location /static/admin {
# root /home/ubuntu/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin;
#}
# リクエストをウェブページに流すためにunixソケットへのパスを設定
location / {
# 「/etc/nginx/proxy_params」にプロキシの設定が記載してある
include proxy_params;
# djangapp.sockにリクエスト結果を流している
proxy_pass http://unix:/home/ubuntu/django-gmail-local/gmail/gmail.sock;
}
}
gunicorn設定ファイル(ファイル名:gunicorn.service)
[Unit]
Description=gunicorn daemon
Requires=gmail.socket
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/django-gmail-local/gmail
ExecStart=/home/ubuntu/django/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/ubuntu/django-gmail-local/gmail/gmail.sock gmail.wsgi:application
[Install]
WantedBy=multi-user.target
gunicorn設定ファイルで参照しているgmail.socketファイル(ファイル名:gmail.socket)
[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/home/ubuntu/django-gmail-local/gmail/gmail.sock
SocketUser=ubuntu
[Install]
WantedBy=sockets.target
階層
home/ubuntu/以下の階層
django:仮想環境名
django-gmail-loacl:djangoで作成したwebアプリを格納したリポジトリ
etc:nginx, gunicornの設定ファイルを記載するために作成したフォルダ
自分で試したこと
nginxエラーログの確認
(django) ubuntu@ip-172-31-36-199:~$ sudo tail -f /var/log/nginx/error.log
2024/02/21 21:56:35 [crit] 100336#100336: *1 connect() to unix:/home/ubuntu/django-gmail-local/gmail/gmail.sock failed (13: Permission denied) while connecting to upstream, client: <アドレス>, server: <アドレス>, request: "GET /form HTTP/1.1", upstream: "http://unix:/home/ubuntu/django-gmail-local/gmail/gmail.sock:/form", host: <アドレス>
ファイルの存在確認と権限の確認
上記でアクセスできないgmail.sockは存在し、アクセスもできるはずである。
(django) ubuntu@ip-***-**-**-***:~$ ls -la /home/ubuntu/django-gmail-local/gmail/
total 476
drwxrwxr-x 4 ubuntu ubuntu 4096 Feb 21 22:01 .
drwxrwxr-x 4 ubuntu ubuntu 4096 Feb 15 10:25 ..
-rw-rw-r-- 1 ubuntu ubuntu 112 Feb 15 13:05 .env
-rw-rw-r-- 1 ubuntu ubuntu 11 Feb 15 10:25 .gitignore
-rw-rw-r-- 1 ubuntu ubuntu 458752 Feb 15 10:25 db.sqlite3
drwxrwxr-x 7 ubuntu ubuntu 4096 Feb 15 10:25 extract
drwxrwxr-x 3 ubuntu ubuntu 4096 Feb 20 13:15 gmail
srwxrwxrwx 1 ubuntu www-data 0 Feb 21 21:56 gmail.sock
-rw-rw-r-- 1 ubuntu ubuntu 661 Feb 15 10:25 manage.py
下記サイトで同様のエラーメッセージの場合の問題点がまとめられているが、”nginxがソケットにアクセスできない”が該当しエラーの発生に繋がっていると思われる。
(その他)gptに確認してと言われ確認したが問題なかった確認事項3点
(django) ubuntu@ip-***-**-**-***:~$ ps aux | grep gunicorn
root 51074 0.0 0.2 11900 2816 ? S Feb18 0:00 sudo systemctl status gunicorn.service
root 51075 0.0 0.1 11900 1624 ? Ss Feb18 0:00 sudo systemctl status gunicorn.service
root 51076 0.0 0.1 10860 1484 ? T Feb18 0:00 systemctl status gunicorn.service
ubuntu 100252 0.0 2.2 31124 21480 ? Ss 21:56 0:00 /home/ubuntu/django/bin/python /home/ubuntu/django/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/ubuntu/django-gmail-local/gmail/gmail.sock gmail.wsgi:application
ubuntu 100254 0.0 3.9 50656 38404 ? S 21:56 0:00 /home/ubuntu/django/bin/python /home/ubuntu/django/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/ubuntu/django-gmail-local/gmail/gmail.sock gmail.wsgi:application
ubuntu 100255 0.0 3.9 50656 38404 ? S 21:56 0:00 /home/ubuntu/django/bin/python /home/ubuntu/django/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/ubuntu/django-gmail-local/gmail/gmail.sock gmail.wsgi:application
ubuntu 100256 0.0 3.9 50656 38404 ? S 21:56 0:00 /home/ubuntu/django/bin/python /home/ubuntu/django/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/ubuntu/django-gmail-local/gmail/gmail.sock gmail.wsgi:application
ubuntu 100878 0.0 0.2 7008 2304 pts/2 S+ 22:17 0:00 grep --color=auto gunicorn
(django) ubuntu@ip-***-**-**-***:~$ ls -la /etc/nginx/sites-enabled/
total 8
drwxr-xr-x 2 www-data www-data 4096 Feb 21 21:53 .
drwxr-xr-x 8 root root 4096 Feb 18 13:04 ..
lrwxrwxrwx 1 root root 44 Feb 21 21:53 gmail -> /home/ubuntu/etc/nginx/sites-available/gmail
(django) ubuntu@ip-***-**-**-***:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful