IPアドレスを増やさずにドメインベースで複数のドメインを運用しつつSSLを使えないかと
調べたところ、Apacheだけでは無理だけどリバースプロキシを使えば何とかなりそうだったので、やってみた。
元々 Apache + mod_python + SSL でDjangoアプリを運用していたところに、
別のドメインでDjangoアプリを追加する。
[フロント]
Pound http://www.apsis.ch/pound
ポート80と443で待機し、リクエストをポート81に流す
ここでSSL処理を行なう。
[バック]
Apache + mod_python
ポート81で待機
ドメインベースで複数ドメインのバーチャルホストを設定
最初はフロントにlighttpdを使おうとしたが、
設定が悪いのか、Djangoの問題なのか、HTTPS通信でPOST後にリダイレクトすると
HTTP通信に戻ってしまう問題が解決できなかったので断念。
(多分lighttpd側の設定でヘッダーなり環境変数なりをちゃんと設定すればうまくいくのだろう)
Poundは設定も簡単で、上記の問題も発生せず、すんなり導入できた。
/usr/local/etc/pound.cfg
User "pound" Group "pound" LogLevel 0 ListenHTTP Address <サーバのIPアドレス> Port 80 Service BackEnd Address 127.0.0.1 Port 81 End End End ListenHTTPS Address <サーバのIPアドレス> Port 443 Cert "<PEMファイルのパス>" xHTTP 0 AddHeader "X-Forwarded-Proto: https" HeadRemove "X-Forwarded-Proto" Service BackEnd Address 127.0.0.1 Port 81 End End End
リバースプロキシとしてだけではなく、
ロードバランサとしても使えるようなので覚えておこう。
参考サイト
手軽なロードバランサ Pound を導入してみました/楽
http://tech.bayashi.jp/archives/entry/server/2007/001945.html
shin3tky blog: Pound reverse proxy メモ
http://shin3tky.blogspot.com/2009/07/pound-reverse-proxy.html
poundでリバースプロキシ - Nobody is perfect.
http://d.hatena.ne.jp/takimo/20071123/1195781424
Poundで作るロードバランサとSSLラッパ(3/4) − @IT
http://www.atmarkit.co.jp/flinux/rensai/apache2_05/apache05c.html
リバースプロキシを導入する際はmod_rpaf :: Drk7jp
http://www.drk7.jp/MT/archives/000573.html