KnowHow

技術的なメモを中心にまとめます。
検索にて調べることができます。

gunicornとNginxを使用してDjangoとFlaskのアプリケーションを同時に公開するための設定ファイル(Nginxの設定ファイル)

登録日 :2024/02/10 06:50
カテゴリ :Linux

Nginxの設定ファイル(通常はnginx.confまたは/etc/nginx/sites-available/default)にリバースプロキシの設定を追加します。次のような設定を追加することで、NginxはGunicornにリクエストを転送します:

Nginxの設定ファイルを作成します

  • /etc/nginx/sites-available/flask_and_django_app
server {
    listen 80;
    server_name your_domain.com;

    location /django/ {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn_django.sock;
    }

    location /flask/ {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn_flask.sock;
    }
}

ただし、Let's Encrypt(cerbot)を使っってHTTPS化しておけば、自動的にHTTPSに対応した記述となる(はず)

sudo apt update
sudo apt install certbot python3-certbot-nginx

sudo certbot --nginx -d example.com

以下、HTTPSに対応した設定ファイル例

server {
    listen 80;
    server_name example.com;

    location /django/ {
        proxy_pass http://unix:/run/gunicorn_django.sock;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /flask/ {
        proxy_pass http://unix:/run/gunicorn_flask.sock;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
     location /static/ {
        alias /path/to/static/files/;  # DjangoやFlaskの静的ファイルのパスを指定
    }

    location /media/ {
        alias /path/to/media/files/;  # DjangoやFlaskのメディアファイルのパスを指定
    }
}

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    location /django/ {
        proxy_pass http://unix:/run/gunicorn_django.sock;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /flask/ {
        proxy_pass http://unix:/run/gunicorn_flask.sock;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
Nginxの設定ファイル
  • nginx.conf
    nginx.conf ファイルの場所は、一般的に以下の場所にあります。

Linux: /etc/nginx/nginx.conf
macOS: /usr/local/etc/nginx/nginx.conf

  • /etc/nginx/sites-available と /etc/nginx/sites-enabled
    Nginxの仮想ホスト(サーバーブロック)の設定ファイルを管理するためのディレクトリです。

sites-available: ここには、使用可能なすべての仮想ホストの設定ファイルが配置されます。サイトを有効にするには、このディレクトリ内の設定ファイルを /etc/nginx/sites-enabled にシンボリックリンクとして追加します。

sites-enabled: 有効な仮想ホストの設定ファイルがここに配置されます。実際にNginxが読み込む設定ファイルはここにあるシンボリックリンクです。このディレクトリ内のファイルが変更されると、Nginxを再起動する必要があります。

これにより、Nginxは sites-available の設定ファイルを参照して、どの仮想ホストを有効にするかを決定します。このアプローチにより、サイトの追加や変更を簡単に管理できます。

Nginxのシンボリックリンクを作成し、設定を有効化:

sudo ln -s /etc/nginx/sites-available/flask_and_app /etc/nginx/sites-enabled/flask_app
sudo systemctl restart nginx

これで、FlaskアプリがGunicornとNginxを介して公開されます。Nginxはポート80でリクエストを受け取り、それをGunicornがリッスンするポート(8000など)に転送します。