Apacheのローカル環境でリバースプロキシがうまく働かない問題を解決

仕事の開発をするときは、テストが簡単になので hosts ファイルを書き変えて、www.hogehoge.jp*1127.0.0.1 にするという荒技を使っている。これが正しいやりかたなのかは知らない。あとはローカルのApacheで、アクセスしたドメインごとにVirtualHostで適切なRailsのデーモンにリバースプロキシで処理をとばしていた。

で、最近ノートにUbuntuを入れてから、これと同じ環境を構築しようとしてなぜか上手くいかずにハマっていた。

Ubuntu 6.10 Edgy EftApacheは、Synapticsを使ってインストールすると*2、/etc/apache2/ にインストールされて、設定ファイルは /etc/apache2/apache2.conf になる。しかも、/etc/apache2/mods-available/ (利用可能なモジュール)と、/etc/apache2/mods-enabled/ (読み込まれているモジュール) という2つのディレクトリが準備されていて、モジュールごとに proxy.load と proxy.conf のように、モジュールの読み込みを行うファイルと、そのモジュールに関する設定を行うファイルが準備されている。あとは、利用したいモジュールの .load / .conf ファイルを mods-enabled に移動させればよい。

このように管理しやすい設定ファイル構成になっていたのだけれども、逆に細かいことをやろうとすると、enabled にあるファイルの中身を全部把握しないと意図した動作をさせられないことがある。今回がまさにそう。

いくらVirtualHost の設定をしても、ProxyPass と書いても、一向に設定が反映されない。で、どうも mod_proxy 自体の動作があやしい、と思って proxy.conf を覗いたら、デフォルトではリバースプロキシのリクエスト全部 deny になってんの。こりゃうまくいくはずがないので、ローカルからのリクエストをallowするように変更。

まだ動かない。で、proxy.confをよく見たら、Cacheがどうのこうのとか書いてあんの。これが原因かなと思ってキャッシュ関係の記述を全部コメントアウト

まだ動かない。で、なんか昔のファイルが延々と読みこまれてる雰囲気だったから、Firefox のキャッシュを消したら動いた。

色々試行錯誤しながらやったので、何が直接の原因かはわからずじまいだったが、とりあえず問題は解決。やっとまともに開発ができる。

*1:偽アドレス

*2:デフォルトでは入ってなかったはず。