web アプリのき開発中はローカルホストで検証し、実際のサービスはリバースプロキシの後ろで運用する方法は、たったこれだけ:
- yesod init する
- config/settings.yml を適切に変更
yesod init すると、Foundation.hs に以下のようなコードがある。
instance Yesod Sample where approot = ApprootMaster $ appRoot . settings
これは、config/settings.yml からよしなにドキュメントルートを決めてくれるという意味。このファイルは、例えば以下のように書く。
Default: &defaults host: "127.0.0.1" port: 3000 copyright: Copyright (C) 2011 Kazu Yamamoto Development: <
このように、Development、Testing、Staging、Production というセクションが設定できる。この内のどれかを作成した Yesod アプリの起動時に指定する。
% sample Development
approot は http://$(host):$(port)/ というルールで生成される。approot 自体があれば、そちらが優先される。
よって、上記の Development では、http://127.0.0.1:3000/ がドキュメントルートとなって、*:3000 で動く。127.0.0.1:3000 ではないことに注意。(アドレスを指定できるようにするようお願いしている。)
Production では、http://example.com/app/sample/ がドキュメントルートとなって、ポート *:3000 で動く。approot を指定していても、port は有効であることに注意。
リバースプロキシと web アプリが同一ホストにある場合、他のホストからアクセスできないように、127.0.0.1:3000 で動くべきだが、今はできない。リバースプロキシには、
http://example.com/app/sample/ → http://127.0.0.1:3000/
のような変換情報を設定しておく。(Mighty なら簡単。)