AlmaLinux 9 に Apache と uWSGI (mod-wsgi) をインストールする例を示します。
# dnf -y install httpd gcc python3-pip python3-devel httpd-devel # pip3 install mod-wsgi wsgi-static-middleware
下記の内容で /opt/myapp/uwsgi.py を作成します。
from wsgiref.simple_server import make_server from wsgi_static_middleware import StaticMiddleware def application(environ, start_response): headers = [("Content-Type", "text/plain")] start_response("200 OK", headers) return ["OK".encode("UTF-8")] if __name__ == "__main__": static_dirs = ["/opt/myapp/static"] app = StaticMiddleware(application, static_root="static", static_dirs=static_dirs) with make_server("0.0.0.0", 80, app) as httpd: try: httpd.serve_forever() except KeyboardInterrupt: pass
上記のファイルを直接実行することで 80番ポートを待ち受ける Webサーバーとして機能します。
$ python3 -B /opt/myapp/uwsgi.py
/etc/httpd/conf.d/uwsgi.conf ファイルに下記を記述して httpd を起動します。モジュールパス名はバージョンによって変わるので適度に書き換えてください。
<VirtualHost "*:80"> LoadModule wsgi_module /usr/local/lib64/python3.9/site-packages/mod_wsgi/server/mod_wsgi-py39.cpython-39-x86_64-linux-gnu.so DocumentRoot /opt/myapp WSGIScriptAlias / /opt/myapp/uwsgi.py Alias /static/ /opt/myapp/static/ <Directory /opt/myapp> Require all granted </Directory> </VirtualHost>
詳細は下記を参照してください。
Webサーバーがリクエストを受信すると application() を呼び出します。第一引数は環境変数、第二引数はレスポンスを返すための関数が渡されます。
def application(environ, start_response): headers = [("Content-Type", "text/plain")] start_response("200 OK", headers) return ["OK".encode("UTF-8")]
環境変数には下記などがあります。
詳細は下記を参照してください。
HTTPステータスは下記の様に返します。
def application(environ, start_response): headers = [("Content-Type", "text/plain")] start_response("200 OK", headers) return ["OK".encode("UTF-8")]
レスポンスヘッダーは下記の様にして返します。
def application(environ, start_response): headers = [ ("Content-Type", "text/html"), ("Content-Encoding", "gzip") ] start_response("200 OK", headers) return ["OK".encode("UTF-8")]
HTTPボディーは下記の様に返します。UTF-8 でエンコードするなどバイナリデータとして返却してください。
def application(environ, start_response): headers = [("Content-Type", "text/plain")] start_response("200 OK", headers) return ["OK".encode("UTF-8")]