Apache mod_rewriteとリバースプロキシ
自分用メモ。
Apacheでmod_rewriteしてリバースプロキシをする際にハマった。
mod_rewriteの引数である[P]は、評価結果をmod_proxyに渡してくれる。
つまり[P]を付けただけではリバースプロキシをしてくれるわけではない。
以下、mod_rewriteしてリバースプロキシをさせた際のサンプル。
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
# ログ出力
RewriteLog C:/Apache2/logs/rewrite.log
RewriteLogLevel 9
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} example\.co\.jp
RewriteRule ^/(.*)$ http://example.co.jp/personality/ [P,L]
</IfModule>
<IfModule mod_proxy.c>
ProxyRequests On
</IfModule>
<VirtualHost *:80>
ServerName example.co.jp
ProxyPass / http://www.〇〇〇.co.jp/
ProxyPassReverse / http://www.〇〇〇.co.jp/
</VirtualHost>
これでexample.co.jpでアクセスするとlocalhostへとび、
mod_rewriteによりexample.co.jp/personality/に変換。
その後、リバースプロキシによりexample.co.jpの部分が
http://www.〇〇〇.co.jp/に変換され、
最終的にhttp://www.〇〇〇.co.jp/personality/となる。
リバースプロキシの設定によりブラウザ上では
http://example.co.jp/personality/と表示される。
※ hostsファイルを書き換え、exmaple.co.jpがlocalhostを向くようにしている。