リバースプロキシ

表に立つサーバは一つだけれど、裏(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