[解決済み】Flaskを80番ポートで動作させるには?
質問
Flaskのサーバーを5000番ポートで動かしているのですが、問題ありません。以下のサイトでアクセスできます。 http://example.com:5000
しかし、単純に以下の場所でアクセスすることは可能なのでしょうか? http://example.com ? ポートを5000から80に変更しろってことだと思うんだけど。しかし、Flaskでそれを試すと、実行時にこのようなエラーメッセージが表示されます。
Traceback (most recent call last):
File "xxxxxx.py", line 31, in <module>
app.run(host="0.0.0.0", port=int("80"), debug=True)
File "/usr/local/lib/python2.6/dist-packages/flask/app.py", line 772, in run
run_simple(host, port, self, **options)
File "/usr/local/lib/python2.6/dist-packages/werkzeug/serving.py", line 706, in run_simple
test_socket.bind((hostname, port))
File "<string>", line 1, in bind
socket.error: [Errno 98] Address already in use
実行中
lsof -i :80
リターン
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 467 root 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 4413 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14346 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14570 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14571 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14573 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
これらのプロセスを最初に終了させる必要があるのでしょうか?それは安全ですか?または、ポート5000でFlaskを実行したまま、メインウェブサイトのドメインを何らかの方法でリダイレクトさせる別の方法がありますか?
解決方法は?
というエラーメッセージが表示されます。
apache2
がポート 80 で実行されています。
開発用であれば、そのまま5000番ポートで放置しておけばいいと思います。
本番用でもあれば
推奨しない
-
停止
apache2
を最初に表示します。
ドキュメントに記載されているように、推奨されません。
開発時にはビルトインサーバーを使用できますが、本番アプリケーションではフルデプロイメントオプションを使用する必要があります。(ビルトインの開発用サーバーを実稼働環境で使用しないでください)。
おすすめ
-
プロキシ
HTTP
トラフィックをapache2
をFlaskに送信します。
こちらです。
apache2
は、すべての静的ファイルを処理し (これは非常に得意です。Flask に組み込まれたデバッグサーバーよりもはるかに優れています)、動的コンテンツのリバースプロキシとして動作し、それらのリクエストを Flask に渡します。
以下はリンクです。 は、Flask と Apache + mod_wsgi のセットアップに関する公式ドキュメントを参照してください。
編集 1 - @Djack のための明確化
<ブロッククオートFlask への HTTP トラフィックを apache2 経由でプロキシします。
80番ポートでサーバーにリクエストが来た場合(
HTTP
)またはポート443(
HTTPS
) ApacheやNginxのようなウェブサーバーはリクエストの接続を処理し、それをどう処理するかを考える。私たちの場合、受け取ったリクエストはWSGIプロトコル上でFlaskに渡され、Pythonコードによって処理されるように設定されるべきです。これがquot;dynamic"の部分です。
ダイナミックコンテンツ用リバースプロキシ
上記のようにWebサーバーを設定することで、いくつかのメリットがあります。
- SSLターミネーション - ウェブサーバーは、わずかな設定でHTTPSリクエストを処理するように最適化されます。おそらく比較的に非常に安全でないPythonで、"roll your own"をしないでください。
- セキュリティ - インターネットにポートを開くには、セキュリティについて慎重に検討する必要があります。Flaskの開発サーバはこのために設計されたものではないので、この目的のために設計されたWebサーバと比較すると、バグやセキュリティの問題が開いている可能性があります。また、Webサーバーの設定が悪いと、安全でない可能性があります。
- Nginx/Apache は画像、CSS、Javascript などの静的ファイルをより効率的に処理し、Python コードが処理するのは "dynamic" リクエスト(データベースからの読み込みやコンテンツの変更が多いもの)だけになります。
- +more。これは、この質問の範囲の境界線です。もしもっと情報が欲しいなら、この分野について研究してください。
関連
-
opencvとpillowを用いた顔認証システム(デモあり)
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] Flaskのリクエストで受信したデータを取得する
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】WindowsでTCPまたはUDPポートをリッスンしているプロセスを見つけるにはどうすればよいですか?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python カメの描画コマンドとその例
-
Python jiabaライブラリの使用方法について説明
-
任意波形を生成してtxtで保存するためのPython実装
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?