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 = ['*']
・・・・


画面が表示されるけど、崩れる。

static_no_read_1.webp



NGINX の実行ユーザがnginx、

manage.py collectstatic した先のディレクトリがwork_userのディレクトリ

なので、NGINXが静的ファイルとして出力する権限が無いので、nginxユーザがアクセスできる様にして(方法は自由)、アクセス。


static_ok_1.webp

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