NGINXとuwsgi連携の設定
2022/02 の作業
NGINXの設定をする時は、sites-available と sites-enabled のディレクトリを用意し、sites-available に設定ファイルを置いて、公開する設定を sites-enabled にリンクを張るのが良くやる方法らしいので、そうする。
1.とりあえず80でListenしてuwsgiと連携するファイルを作成
/etc/nginx 設定等々があるので、そこに作成する。
$ sudo mkdir /etc/nginx/sites-available $ sudo mkdir /etc/nginx/sites-enabled $ sudo vi /etc/nginx/sites-available/worksite_nginx.conf
upstream django { # uwsgi を 8001 で起動しているので、それに接続 server 127.0.0.1:8001; } server { listen 80; server_name _; charset utf-8; client_max_body_size 5M; # adjust to taste location /media { # manage.py collectstaticしたmediaディレクトリ alias /home/work_user/worksite/media; } location /static { # manage.py collectstatic したstaticディレクトリ alias /home/work_user/hogesite/static; } location / { uwsgi_pass django; # uwsgi の設定で作成したファイル include /etc/nginx/uwsgi_params; } }
$ cd /etc/nginx/sites-enabled $ sudo ln -s ../sites-available/worksite_nginx.conf .
作成したディレクトリを参照する様にnginx.confのhttpブロックの最後辺りに設定を追加。
$ sudo vi /etc/nginx/nginx.conf
http { ・・・・ include /etc/nginx/sites-enabled/*; }
2.uwsgi が起動した状態でNGINXを再起動して確認
$ sudo systemctl restart nginx
EC2インスタンスのセキュリティタブのインバウンドルールで80でアクセスできる様に開けてからアクセスする。
uwsgiを起動しているコンソールに以下のようなエラーが出力される。
・・・・
django.core.exceptions.DisallowedHost: Invalid HTTP_HOST header: 'ec2-999-999-999-999.us-east-2.compute.amazonaws.com'. You may need to add 'ec2-999-999-999-999.us-east-2.compute.amazonaws.com' to ALLOWED_HOSTS.
・・・・
ドメインを設定するまでは、アクセスできるように、prod.pyのALLOWD_HOSTを設定しておく。
EC2に振られたホスト名(変わるけど)でもいいけど、面倒なので、一旦「*」にする。
(work_venv) $ vi ~/worksite/worksite/settings/prod.py
・・・・
ALLOWED_HOSTS = ['*']
・・・・
画面が表示されるけど、崩れる。

NGINX の実行ユーザがnginx、
manage.py collectstatic した先のディレクトリがwork_userのディレクトリ
なので、NGINXが静的ファイルとして出力する権限が無いので、nginxユーザがアクセスできる様にして(方法は自由)、アクセス。

こんな感じで表示されれば、表示するだけの設定は完了。