ほんじゃら堂

めんどくさい仕事をラクにする作業自動化レシピ集

リバースプロキシを使って1つのIPアドレスで複数ドメイン(djangoアプリ)とSSLを使えるようにする

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