0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#0028(2024/01/27)Nginx, uWSGI, Flaskを使ったサーバー構成

Posted at

以下では、Flask を使ったサーバー構成として、

  1. Flask(単独)
  2. Nginx + Flask
  3. uWSGI + Flask

の三つを比較し、それぞれ「何ができるのか」「どんな用途に向いているか」をまとめています。


1. Flask(単独)

概要

  • Python のコマンド (python app.py) 等で起動する、Flask 標準の簡易サーバーをそのまま使う形。
  • 開発用サーバーとして想定されており、本番運用(プロダクション)には推奨されません。

できること

  • 開発やテスト : ローカル環境でアプリの動作確認を行う際には手軽で便利。
  • 非常にシンプル : 追加の設定が不要なため、とにかく素早く起動できる。

制限 / 注意点

  • パフォーマンスやスケーラビリティが低い : シングルスレッド・シングルプロセスが基本で、高い負荷には対応が難しい。
  • セキュリティ面での懸念 : SSL 終端やリクエストのフィルタリング等を自前でカバーしづらい。
  • 本番運用非推奨 : Flask 開発者自身も「開発・デバッグ向け」としており、負荷試験や大量アクセス対応は想定外。

2. Nginx + Flask

概要

  • Nginx をフロントエンドとして、Flask の簡易サーバーをバックエンドとして動かす構成。
    • たとえば、location / { proxy_pass http://127.0.0.1:5000; } のようにリバースプロキシ設定を行い、Flask に接続する。

できること

  • 静的ファイルの配信を Nginx が担当 : 画像や CSS/JS を高速に配信可能。Flask の負荷を軽減できる。
  • SSL/TLS 終端 : HTTPS の処理を Nginx が担当するので、Flask は HTTP (ローカル通信) だけで動く。
  • 基本的なリバースプロキシ機能 : IP 制限、ロードバランシング(複数 Flask インスタンスを立ち上げる場合)などを Nginx で設定可能。

制限 / 注意点

  • Flask の簡易サーバー自体は本番向けでない : 依然として Flask 側の並列処理能力は限定的。
  • 高負荷時の対応力は限定的 : Nginx がプロキシとして踏ん張っても、Flask の開発サーバーは限界が来やすい。
  • 本格的なプロダクション対応には uWSGI や Gunicorn などのアプリケーションサーバが望ましい : Nginx + Flask (dev server) はテストまたは限定的な運用向き。

3. uWSGI + Flask

概要

  • uWSGI (Python 用の WSGI サーバ) と Flask アプリケーションを直接連携する構成。
  • Nginx は使わない(もしくは別途導入しない)ため、uWSGI が直接クライアントからの接続を受け付けるケースもあり得る。

できること

  • 並列処理・高負荷対応 : uWSGI はマルチプロセス/マルチスレッドをサポートし、Flask を本番運用するための性能向上が図れる。
  • WSGI 標準 : Flask などの Python フレームワークとの相性が良い。

制限 / 注意点

  • SSL/TLS や静的ファイル配信は uWSGI で設定する : Nginx に比べ設定が複雑になりがち。
  • 負荷分散などの機能は限定的 : Nginx ほど豊富なリバースプロキシ機能がないため、大規模運用では物足りない場合がある。
  • 通常は Nginx と組み合わせる : 安定した本番環境では、やはり Nginx + uWSGI + Flask の 3 つを組み合わせる構成が一般的。

まとめ

構成 メリット デメリット 主な用途
1. Flask (単独) - 設定不要ですぐ起動
- 開発・テストに最適
- 高負荷に弱い
- SSL や静的ファイル配信などの機能不足
ローカル開発/デバッグ
2. Nginx + Flask - 静的ファイル・SSL を Nginx に任せられる
- リバースプロキシとして柔軟な設定可
- Flask 側のサーバは開発用
- 本格的な並列処理が苦手
比較的軽いサービスや試験運用
3. uWSGI + Flask - uWSGI による並列処理性能の向上
- WSGI 規格に準拠
- SSL/静的ファイルなどを自力または uWSGI に任せる必要
- 負荷分散機能は限定的
小〜中規模のプロダクション運用 (ただし Nginx なし)

本番運用でより高い安定性やパフォーマンスを求めるなら、実際には Nginx + uWSGI + Flask の 3 構成(プラス、場合によってはコンテナ技術やロードバランサなど)を使うのが王道です。

  • Nginx : フロントエンドでリバースプロキシや静的ファイル、SSL/TLS を担当
  • uWSGI : WSGI サーバとして Flask アプリを多数のリクエストに対応させる
  • Flask : アプリケーションロジックを実装するフレームワーク

ただし、構成をシンプルにしたい場合や、トラフィックが少ない小規模サービスでは、本回答の比較表を目安に、どの程度の構成が必要か検討してみてください。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?