Python3 Bottleフレームワーク入門(その12)- ReverseProxy方式 Bottle連携SSL Apache起動
2018年7月27日Linux Tips, Python Bottle Framework, テクニカル, トピックス, ノウハウ
前回の章ではWSGI方式で行ったが今回はRverseProxy方式のApache連携を紹介する。ReverseProxy方式は透過型のProxyで内部で動作しているhttp方式のWEBサーバをお手軽に安全にラッピングしてくれる方式である。内部サーバのコンテンツ作りに不安があるならこの方式が良いと思います。また、内部のシステムが簡単にhttpsに置き換えられないなら、この方法で強引に変更できれば簡単にすみますね!非常に便利なリバースプロキシーです
転送先内部サーバー
いつものごとくありがちなサンプルコード。127.0.0.1で設定しておくと更に安全な接続になります。ローカルホストは外部から接続できませんので。
1 2 3 4 5 6 7 8 |
from bottle import route, run, template,default_app @route('/hello/<name>') def index(name): return template('<b>Hello {{name}}</b>!', name=name) if __name__ == "__main__": run(host="127.0.0.1",port=8080, quiet=False, reloader=True) |
Apacheのリバースプロキシー設定
ほんのすこしだけ手を加えればリバースプロキシーになります。ProxyPassとProxyPassReverseの箇所だけです。Proxy先のpythonサーバ&プログラムはマルチスレッド通信でなおかつスレッドセーフなコーディングになっていることが前提です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
LoadModule wsgi_module modules/mod_wsgi.so Listen 443 https <VirtualHost *:443> ServerName www.pytest.net:443 # Use separate log files for the SSL virtual host; note that LogLevel # is not inherited from httpd.conf. ErrorLog logs/www.pytest.net_ssl_error_log TransferLog logs/www.pytest.net_ssl_access_log LogLevel warn SSLEngine on SSLProtocol all -SSLv2 -SSLv3 -TLSV1 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SSLv3:!SSLv2:!TLSv1 SSLProxyEngine on SSLCertificateFile /home/works/ope/cert/www.pytest.net.crt SSLCertificateKeyFile /home/works/ope/cert/private.key SSLCertificateChainFile /home/works/ope/cert/ca-bundle.ca SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown ProxyPass / http://127.0.0.1:8080/ ProxyPassReverse / http://127.0.0.1:8080/ </VirtualHost> |
リバースプロキシー起動
1 2 3 |
# systemctl start httpd or # systemctl restart httpd |
サイトにアクセスする例
/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対応