メモ: Kanonセットアップ後にApacheが起動しないとき

(2011/05/20 追記)解決しました。感謝です。 →メモ: Apache http_proxyの有効化 - 虎塚

プロジェクト管理ツールのKanonをセットアップした後、WebブラウザからSampleProjectにアクセスしたら繋がらなかったので、その話をメモしておきます。

# Visual Art'sの往年の名作と誤解されそうになったので、接頭語を付け、リンクを貼ることにしました。うぐぅ

サーバ(EC2インスタンス)側のプロセスを確認してみたところ、Webサーバが動いていませんでした。セットアップメッセージを見ると、次のとおりApacheの設定ファイルの文法チェックでコケていました。

Run '/etc/init.d/apache2 restart' to activate new configuration!
Enabling module auth_digest.
Run '/etc/init.d/apache2 restart' to activate new configuration!
Considering dependency dav for dav_fs:
Module dav already enabled
Enabling module dav_fs.
Run '/etc/init.d/apache2 restart' to activate new configuration!
Enabling site kanon.
Run '/etc/init.d/apache2 reload' to activate new configuration!
Enabling site vcs.
Run '/etc/init.d/apache2 reload' to activate new configuration!
 * Stopping web server apache2                                                  
 * The apache2 configtest failed, so we are trying to kill it manually. This is almost certainly suboptimal, so please make sure your system is working as you'd expect now!
 ... waiting                                                             [ OK ]
 * Starting web server apache2                                                  Syntax error on line 51 of /etc/apache2/sites-enabled/kanon:
Invalid command 'ProxyPass', perhaps misspelled or defined by a module not included in the server configuration
Action 'start' failed.
The Apache error log may have more information.
                                                                         [fail]

セットアップスクリプトを実行すると、resource/httpd.conf が /etc/apache2/sites-enable/kanon にコピーされます。# 正確には、/etc/apache2/sites-available/kanon にcpされますが、それはシンボリックリンクで /etc/apache2/sites-enable/kanon を参照しています。

というわけで、/etc/apache2/sites-enabled/kanon を確認します。該当行は、Jenkinsへの接続設定のProxyPassのところです。(すぐ使う見込みはないのですが、欲張ってJenkinsもインストールしたのです。。。)

(略)
<Location /jenkins>
  Order allow,deny
  Allow from all

  AuthType Digest
  AuthName kanon
  AuthUserFile /etc/opt/kanon/kanon_users.htdigest
  Require valid-user

  BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On

  ProxyPass        http://127.0.0.1:8080/jenkins
  ProxyPassReverse http://127.0.0.1:8080/jenkins
</Location>
(略)

Apacheのマニュアルによると、リバースプロキシの設定をするための記述です。ここでは、/jenkins以下のディレクトリが参照されたときに、ローカルの http://127.0.0.1:8080/jenkins を見にいくようになっています。

しかし、一見、文法上の問題はないようです。# 最初、1つしかアドレスを指定していないとダメなのかと思いましたが、Locationの内部で使うときは、Locationの要素から第一引数を取るので、1つでOKらしいです。

ひとまずプロキシのない環境で使うので、ProxyPassとProxyPassReverseの行を削除して保存し、 Apache(/etc/init.d/apache2)を開始したら、繋がりました。

わからないこと

本来の正しい対処法が不明です。mod_proxyが構成されていない状態で、プロキシ構成を前提とした記述が設定ファイルにあるのが問題なんではと思います。

また、プロキシ環境用にセットアップするには、インストール手順どおりプロキシ関連の環境変数を設定してあげれば、上手いこといくのかどーか、とかも。(未検証)