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を再起動することで変更が有効になります。
関連記事: