表に立つサーバは一つだけれど、裏(internet network内)にいくつも別サーバがあり、
www.mydomain.com
は表サーバの情報が出るけれど、
www.mydomain.com/service1
www.mydomain.com/service2
はそれぞれ別のサーバが担当していて表のサーバがディレクトリによって割り振る。
そんなことができたらいいな、と思っていたが、何のことはない、ずっと昔からリバースプロキシと呼ばれる形で存在していたのだった。
でも自分が考えている、
・表のサーバはWebサーバとしてそのまま機能していて
・ディレクトリにより、内部サーバ(ローカルIPアドレス)に振り分ける
という設定例がなかなか見つからない。
しかし、えいままよ、と思ってやってみたらできた。
心配だったのは表のサーバはSSLが有効になっているけれど、内部サーバはhttpのみ。
これでうまくいくのか?と思っていたけれど、表サーバが賢く処理してくれるようだ。
実際に行うこと。
表のサーバ兼リバースプロキシサーバが
www.mydomain.com/
で動いているとして、
www.mydomain.com/temp
に内部IPアドレス/172.25.47.97のWebサーバを割り当てたい。
sudo vim /etc/apache2/conf-available/reverse_proxy.conf
というファイルを新たに作成し、
<IfModule mod_proxy.c>
ProxyRequests Off
<Proxy *>
Require all granted
</Proxy>
# 転送先サーバーとディレクトリ
ProxyPass /temp http://172.25.47.97
ProxyPassReverse /temp http://172.25.47.97
</IfModule>
でセーブする。そのあとこのconfファイルとproxy関係のモジュールを有効にし、Apache2を再起動する。
sudo a2enconf reverse_proxy
sudo a2enmod proxy proxy_http
sudo service apache2 restart