当社はIT技術のオンライン教育を得意としたセミナー専門会社です。 | 一戸英男

ITエンジニアの技術力UPをお約束します。

Python3 Bottleフレームワーク入門(その11)- WSGI方式 Bottle連携SSL Apache起動

WEBサーバーでApacheと連携したいと思う人は多いと思います。いままで紹介していなかったので改めて見本を掲載したいと思います。ApacheとBottleの連携方法は2種類あります。1つはこれから紹介する外部WSGI連携とリバースプロキシーで対応する方法です。プログラミングでセキュリティに不安な人は後者が良い場合が多いかもしれません。同時アクセス数とパフォーマンスを重視するなら前者だと思います。


シンプルな起動メインコード

それでは最初にメインのソースコードを書いていきたいと思います。元々WSGI対応しているBottleですから記述はシンプルです。下記コードは直接Pythonコマンドで指定起動もOK。Apacheの場合はelse分岐の方で起動します。このファイルは取り敢えずindex.pyという名前にしておきましょう。

Apacheの仮想サーバ設定

/etc/httpd/conf.d/python.confとして配置した場合の記述です。これは仮想サーバの設定です。予めmod_wsgiはインストールしておいてください。

肝はWSGIDaemonProcessの部分です。スレッド関連のパラメータを記述していますがきちんと設定しましょうね。これを正しく設置しないとスレッドセーフにならない場合があるため要注意です。DoS攻撃されたらイチコロです。実勢のアクセス量にあわせてチューニングしてください。maximum-requestsはこの値を超えるとカレントプロセスが破棄され新プロセスが再作成されます。ごみメモリもクリアされます。WSGIDaemonProcessのpython-pathの値は自分の環境に合わせ設定してください。python-homeは仮想環境のときに使います。また仮想環境ではないが複数のpythonバージョンが存在するならpython-pathを明示的に使用します。python仮想環境を使って利用する場合はglobalで設定し起動すれば明示的な指定は不要かもしれません。

呼び出すpythonコードの中身を考慮しないで考えた場合はプロセス数とスレッドに関してはもし貴方がプログラムのコードをマルチに動作させることに自信がないのならまずはスレッドセーフにできるだけ安全確実なのはprocess数は任意としてthreadsは’1’にすることです。(もちろん複数のリクエストに対して競合が起きないようにしていないと論外ですよ。)proxy側と呼び出すpython側のプログラムがマルチプロセス・マルチスレッドでスレッドならApacheとpythonプログラムが適正なセッション数で処理できるようprocess&thredsを調整することもできます。つまり後方の呼び出されるプログラムがシングルスレッドなのか、マルチスレッドなのか、マルチプロセスマルチスレッドなのかで状況が違ってきます。それが分かりにくいならthreadsを’1’にしておくことが無難なのです。余裕があるならapacheとpythonアプリケーションのスレッドコネクションの生成の仕方を相互に見極めて調整してゆくと良いでしょう。スレッドの生成が相互に噛み合わないとプログラムが落ちてしまうので注意が必要です。テストに負荷テストのプログラムを使ってthredsやprocessの値を相互(apache側、python側の双方)に調整してゆくことでもっと本格的な設定が可能になります。

Apache起動

サイトにアクセスする例

/hello/の後に任意の文字列を入れてください。ページボディに表示されます。

尚、予めテストサーバにIPアドレスを割り当て名前をWindowsのHostsに登録しておけば下記のように名前ベースのホスト名で実験ができます。



Python Bottle Framework入門 全13回
1.基礎編サーバ起動
2.リクエストメソッド
3.ORM Peewee (MySQL)
4.ORM Peewee CRUD
5.Cookie And Session
6.Abort and Redirect
7.マルチスレッドWEBサーバ
8.デーモン化
9.Json
10.WSGI on SSL
11.Apache連携起動(外部WSGI) SSL接続
12.Apache連携起動(ReverseProxy)SSL接続
13.hprox連携起動(ReverseProxy)SSL接続&HTTP2対応