2026年6月22日

2026年6月22日

NginxでPythonアプリ(Flask/Django)をリバースプロキシする方法

はじめに

この記事では、Nginxを使ってPythonアプリケーション(Flask/Django)をリバースプロキシする方法について解説します。Nginxは高速なWebサーバーでありながら、効率的な負荷分散やSSL接続の設定などにも優れています。特に大規模なウェブサイトにおいて、静的コンテンツと動的コンテンツを分けて処理することで、パフォーマンスを大幅に向上させることが可能です。

症状・背景

このテーマが必要になる主な場面は以下の通りです:

  • フロントエンドサーバーとしてのNginx: Nginxは高速な静的コンテンツ配信が得意ですが、動的コンテンツに対して直接処理を行うことは推奨されません。その場合、動的コンテンツを生成するPythonアプリケーションにリバースプロキシとしてNginxを使うことで、全体のパフォーマンスと安定性を向上させることができます。
  • セキュリティ: SSL接続の設定はNginxで行い、Pythonアプリケーション本体にTLS証明書を直接インストールする必要がありません。これにより、アプリケーション側でのSSL処理による負荷を軽減することができます。
  • 負荷分散: Pythonアプリケーションの複数のインスタンスを動的にリバースプロキシすることで、サーバー間での負荷を分散させることができます。

手順・設定方法

ステップ1: NginxとPythonアプリケーションのインストール

# Debian/Ubuntuシステムの場合
sudo apt-get update
sudo apt-get install nginx python3-pip

# Pythonアプリケーション(ここではFlaskを使用する場合)
pip3 install Flask

ステップ2: Nginxコンフィグレーションファイルの設定

# /etc/nginx/sites-available/default または新規ファイルを作成し、以下の内容を追加します。
server {
    listen 80;
    server_name yourdomain.com;

    location / {
        proxy_pass http://127.0.0.1:5000; # Flaskアプリケーションのデフォルトポート
        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;
    }
}

ステップ3: Pythonアプリケーションの設定

# Flaskアプリケーションを作成します。
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

ステップ4: Nginxの設定を有効化と再起動

# サイト設定ファイルが正しければ、以下のコマンドでNginxを再起動します。
sudo systemctl restart nginx

注意事項

  • セキュリティ: NginxとPythonアプリケーションの間での通信はHTTPであり、SSL接続にはHTTPSを使用することをお勧めします。この場合、Nginx側でSSL接続を設定し、後方転送(proxy_pass)先のPythonアプリケーションには無効化するようにします。
  • パフォーマンス: NginxとPythonアプリケーション間での通信がHTTPであるため、パフォーマンスへの影響は小さいですが、SSL接続の設定により若干の負荷が増加することがあります。これを軽減するために、Nginx側でSSL接続を設定し、後方転送先にHTTPSを使用するようにします。
  • 監視: NginxとPythonアプリケーションの両方について定期的に監視を行うことが重要です。特にPythonアプリケーションは、プロセスが停止したり、リソースが不足したりした場合など、問題が発生することがあります。

まとめ

1. Nginxのインストール: Nginxをシステムにインストールし、必要に応じてパッケージ管理ツールを使用してPythonもインストールします。

2. Flaskアプリケーションの作成: PythonでシンプルなWebアプリケーションを作成します。ここではFlaskを使用していますが、Djangoでも同様の手順が適用されます。

3. Nginxの設定: Nginxのコンフィグレーションファイルにリバースプロキシの設定を追加し、Pythonアプリケーションへの接続先を指定します。

4. 再起動: 設定完了後、Nginxを再起動することで変更が有効になります。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ