web-dev-qa-db-ja.com

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

このチュートリアル に続いて、Django、Gunicorn&nginx invirtualenvを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 appを提供できます-私のDjangoアプリにアクセスすることができましたフォルダー(projectnameを実際のプロジェクト名に置き換えます):

_gunicorn --bind 0.0.0.0:8000 projectname.wsgi:application_

今回は_mydomain.com:8000_にアクセスすると、ウェルカムページが再び表示され、URLの末尾に_/admin_を追加すると、ログイン画面minusCSS(Gunicornは静的CSSファイルを認識しないため、チュートリアルでは今のところ問題ありません)。

ここから次のsystemdファイルを作成しました(masterfolderを使用してすべてのアクションが実行されるフォルダーを表示している場合、myuserは私のシステムユーザー(ubuntu、これは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

ここで、masterfolderstartprojectを実行したときに_Django-admin_が作成するフォルダー階層と一貫していることに注意してください。

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

masterfolderの中を見ると、確かにno .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
_

このインフラストラクチャのすべてがどのように連携して機能するかを理解する上で、ここでは基本的なものが欠けているように感じます。もちろん、プロセスの私の理解の誤りを遠慮なく指摘してください。

3
t0mgs

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

権限はmyuser:www-data

また、nginx構成ファイルにスペルミスがあります。それがタイプミスであることを願っています:)

3
akhilsp