テスト目的で、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 のマシンのコンテンツを表示するようになった。目出度し。
|
|