Gunicorn によってソケットが作成されないため、nginx は 502 エラーをスローします。

Gunicorn によってソケットが作成されないため、nginx は 502 エラーをスローします。

続くこのチュートリアル、Django、Gunicorn、nginxをセットアップすることができました仮想環境内AWS EC2 インスタンス (Ubuntu 16.04 を実行) 上で、全体を「デーモン化」するための Upstart ファイルを作成します。

virtualenv をアクティブ化した後、次のことを確認しました。

  1. Djangoは動作する- 以下を実行することで、ポート 8000 経由で Django プロジェクトにアクセスできました。

./manage.py runserver 0.0.0.0:8000

訪問すると、mydomain.com:8000デフォルトの Django ページが迎えてくれました。

  1. Gunicornは動作し、Djangoアプリを提供することができます- プロジェクトのフォルダーからこれを実行すると、Django アプリにアクセスできました (projectname実際のプロジェクト名に置き換えてください)。

gunicorn --bind 0.0.0.0:8000 projectname.wsgi:application

今回訪問するとmydomain.com:8000またウェルカムページが表示され、/adminURLの末尾に追加するとログイン画面が表示されるようになった。マイナスCSS (Gunicorn は静的 CSS ファイルを認識しないため、チュートリアルによれば今のところは問題ありません)。

ここから、次の systemd ファイルの作成に進みました ( は、masterfolderすべてのアクションが実行されるフォルダーを示すために使用され、これは Ubuntu インスタンスであるため、myuserシステム ユーザー ( ) です)。ubuntu

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=myuser
Group=www-data
WorkingDirectory=/home/myuser/masterfolder
ExecStart=/home/myuser/masterfolder/myvirtualenv/bin/gunicorn --workers 3 --bind unix:/home/myuser/masterfolder/projectname.sock$

[Install]
WantedBy=multi-user.target`

私は2つの問題に遭遇しました:

  1. ソケットは作成されていません- nginxのログファイルを確認するとき外側も内側もvirtualenv (なぜ同じなのかはよくわかりませんが) でも同じエラーが発生しました:

2017/01/17 15:12:43 [crit] 12403#12403: *3 connect() to unix:/home/myuser/masterfolder/projectname.sock failed (2: No such file or directory) while connecting to upstream

ここで、を実行したときに作成されるmasterfolderフォルダー階層と一致していることに注意してください。django-adminstartproject

masterfolder/ ├── manage.py └── projectname ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py

中を見るとmasterfolder確かに.sockファイルが全くない、という名前のものは気にしないでくださいprojectname.sock

  1. そのため、nginxは動作しているにもかかわらず、502エラーが発生します。-

私のファイルは次のようetc/nginx/sites-availabe/projectnameになります:

server {
    listen 80;
    server_name www.mydomain.com mydomain.com MYIPADDRESS;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/masterfolder/projectname;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/myuser/mastefolder/projectname.sock;
    }
}

もちろん、正しくシンボリックリンクされており、修正を試みるたびに、次のコマンドを実行します。

sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl restart nginx

このインフラストラクチャ全体がどのように連携して動作するかを理解するのに、何か基本的なことが欠けているように感じます。もちろん、プロセスに関する私の理解に誤りがあれば、遠慮なくご指摘ください。

答え1

ディレクトリの権限を確認しましたかmasterfolder?

権限は である必要がありますmyuser:www-data

また、nginx 設定ファイルにスペルミスがあります。タイプミスであることを願います:)

関連情報