Pyramidのリソースを別ドメインで公開したい
Pyramidでリソーストラバーサルベースのアプリケーションを使っていると、あるリソース配下のものだけ別ドメインで公開したいということがあります。それぞれのブログリソースをそれぞれ別のドメインで公開したい、とかですね。
/(Root, http://manage.blog.com/) | +-blog1(Blog, https://blog1.com/) | | | +entry1(Entry) | +-blog2(Blog, https://blog2.com/)
blog1とblog2をそれぞれ別ドメインで公開したいときはリバースプロクシを併用すれば実現できます。
Virtual Root
PyramidにはX-Vhm-Rootヘッダに指定された絶対パスのリソースをRootとみなす機能があります。Nginxでblog1を別ドメインでの公開はこのようになります。
daemon off; http { server { server_name blog1.com; location / { proxy_pass http://manage.blog.com/; proxy_set_header X-Vhm-Root /blog1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } } events { }
HTTPSを伝える
Virtual Rootを設定したときに忘れがちですがPyramidを含むWebアプリケーションフレームワークで、スキーマ込みのURLを生成するときにhttpかhttpsかは重要な要素です。 NginxからX-Forwarded-Protoヘッダで伝えましょう。
daemon off; http { server { server_name blog1.com; location / { proxy_pass http://manage.blog.com/; proxy_set_header X-Vhm-Root /blog1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # httpsを伝える proxy_set_header X-Forwarded-Proto https; } } } events { }
WSGIサーバがWaitressのときは trusted_proxy の設定も必要になります。 詳細や他の方法については Using Behind a Reverse Proxy を参照してください。