俺だけのために Ore! Tips!

Apache2 サーバを Reverse Proxy として使う

2005年11月 5日 作業


テスト目的で、LAN 上にもう一台 Web サーバを立てたので、外部からそのサーバへも http でアクセスさせたい。ということで、現在 80番ポートをポートフォワーディングしているサーバを Reverse Proxy とする設定を行った。

今までは、http://otoko.netandfield.com にアクセスがあれば、内部の 192.168.1.214 のマシンにポートフォワードしていた。今回、okama というサーバが追加になったので、DNS で okama を otoko の CNAME として設定。http://okama.netandfield.com 宛のアクセスも(ポートフォワードされた結果)192.168.1.214 で受けて、アクセス先が otoko なら今までどおり自分のコンテンツを返し、okama 宛だったら http://192.168.1.215(新しく追加したサーバ)から http でコンテンツを取得し、そのままその結果をアクセス元に返す・・・という仕組みだ。
ま、典型的な Reverse Proxy の動きやね。

以前、Apache 1.3 で Reverse Proxy の設定をしたことはあったのだが、Apache2 では初めて。で、よくわからないので mod_proxy, mod_rewrite, mod_proxy-http などのモジュールを有効にして Apache2 を再度 make してみた。(実際は mod_proxy だけで良いと思うけど。ま、ついでに(^^;)

otoko# cd /usr/local/src/httpd-2.0.54
otoko# make clean
<略>
otoko# ./configure --enable-so --enable-ssl --with-ssl=/usr \
--enable-proxy --enable-rewrite --enable-proxy-http
otoko# /usr/local/apache2/bin/apachectl stop
zakuro# make
zakuro# make install
Making install in srclib
Making install in apr
Making all in strings
<略>
Making install in proxy
<略>

なんか、install in proxy とか言うてるけどね。
これでええんかな?

Apache2 は、mod_proxy の機能は内蔵されちゃったのかな?(mod_ssl みたいに)

で、今回は Reverse Proxy をする Web サーバが自分自身のコンテンツも公開しているので、複数のホスト名で運用するため VirtualHost を使う形になる。

つーことで、/usr/local/apache2/conf/httpd.conf に以下の記述を追加して Apache2 起動。(Proxy のドキュメントキャッシュ機能は使わないので(素通しするだけなので)ProxyRequests は Off にします)


NameVirtualHost *:80

<VirtualHost *:80>

    ServerName otoko.netandfield.com
    ServerAdmin webmaster@netandfield.com
    DocumentRoot /usr/local/share/www/htdocs

    ErrorLog /var/log/otoko.netandfield.com/error_log
    CustomLog /var/log/otoko.netandfield.com/access_log combined
    ScriptAlias /cgi-bin/ "/usr/local/share/www/cgi-bin/"

    <Directory "/usr/local/share/www/cgi-bin">
        Options ExecCGI
    </Directory>

</VirtualHost>


<VirtualHost *:80>

    ServerName okama.netandfield.com

    <IfModule mod_proxy.c>
        ProxyRequests Off
        ProxyPass / http://192.168.1.215/
        ProxyPassReverse / http://192.168.1.215/
    </IfModule>

</VirtualHost>


otoko# /usr/local/apache2/bin/apachectl start

LoadModule で外部のモジュールをロードすることもなしに無事動いている。1.3系の時は mod_proxy.so をロードしなくちゃいけなかったが。
やっぱ mod_proxy はもう本体に取り込まれちゃってるんだろうな。

これで、無事、http://otoko.netandfield.com なら今まで通り 192.168.1.214 のコンテンツを表示し、http://okama.netandfield,com なら新しく入れた 192.168.1.215 のマシンのコンテンツを表示するようになった。目出度し。

前ページに戻る


Copyright (C) 2005 S.Maaasamasa.