windows10 + Apache2.4(Reverse Proxy) + waitress + Flask3.x
WindowsでApache2.4 + mod_wsgiの場合numpyが動かない。 Python3.7 ~ Python3.11まで一応試したけど動かなかった。
Apache error log -- how to fix "numpy ImportError" or disable it?
https://stackoverflow.com/questions/69519963/apache-error-log-how-to-fix-numpy-importerror-or-disable-it
代替案としてwaitressを使って問題がないかテストをしたので構築時のメモ。
構築手順はとても簡単。
Waitress
https://docs.pylonsproject.org/projects/waitress/en/stable/index.html
1. 構築の準備
- Apache2.4のダウンロードをしてC:\Apache2.4に展開
- Microsoft Visual C++ 2015 再頒布可能パッケージ Update 3をダウンロードしてインストール
※Apacheを動かすのに必要 - Pythonのダウンロードをしてインストール
※インストール時にAdd python.exe to PATHのチェックをつけると便利です。
2. waitressとflaskの設定
- 以下のプログラムを任意の場所に保存
- 必要に応じてvenvを作成して、waitressとflaskをインストール
- python app.pyでアプリケーションを起動
# app.py waitressの設定 from waitress import serve from api import app # リクエストを全てのインターフェイスで待ち受け # ポート番号8080で待ち受け # http://127.0.0.1:8080/ に来たリクエストも http://127.0.0.1:8080/test に来たリクエストも同じように扱う # 同時に受け付けられるスレッド数を20とする serve(app, host="0.0.0.0", port=8080, url_prefix="/test", threads=20)
# api.py flaskの設定 from flask import Flask, request, make_response import json app = Flask(__name__) @app.route("/") def status(): headers = { key: str(value) for key, value in request.headers.items() if type(value) is str } res = make_response( "<br>".join([f"{key}: {value}" for key, value in headers.items()]), 200 ) res.headers["Content-Type"] = "text/html" return res
3. Apacheのhttpd.confの変更と起動
- Apacheに来たリクエストをhttp://127.0.0.1:8080/で動作させるwaitressに転送するためにC:\Apache24\conf\httpd.confをエディタで開いてhttpd.confの最下行に以下の内容を追加
- コマンドプロンプトでC:\Apache24\binを開いてhttpdを実行。
- ブラウザからhttp://127.0.0.1/にアクセスするとレスポンスが表示されます
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so ProxyRequests Off ProxyPass / http://127.0.0.1:8080/ # http://localhostにアクセスが来たらhttp://127.0.0.1:8080/へリクエストを転送する設定 ProxyPassReverse / http://127.0.0.1:8080/ # http://localhostにアクセスが来たらhttp://127.0.0.1:8080/へリクエストを転送する設定