エラーメッセージとその対処あれこれ
今回はApacheのエラーメッセージと対処について思いつくところをまとめてみました。
ポートが競合している
(98)Address already in use: make_sock: could not bind to address [::]:80 no listening sockets available, shutting down Unable to open logs
既にListenポートが使われているために、起動が出来ないパターンです。
Apacheが起動しているか、同じポートを使う別のデーモンが起動していると可能性が考えられます。
WellKnownポートをListenポートにしているがrootユーザーで実行しなかった
(13)Permission denied: make_sock: could not bind to address [::]:80 no listening sockets available, shutting down Unable to open logs
ListenポートをWellKnownポート(〜1024)としている場合、管理者権限でApacheを実行する必要があります。
一般ユーザーでApacheを起動させようとした場合が考えられます。
※ちなみに1024番以上なら一般ユーザーでも起動できたような気がします。
PIDファイルが残っていた
実害があることはあまりないと思いますが、エラーログにこんなメッセージが出ることもあると思います。
[Tue Sep 28 21:59:36 2010] [warn] pid file /etc/httpd/run/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
「前回Apacheが稼働していた際のPIDファイルが残っており、上書きしました」ということです。
正常に起動すれば特に問題ないかと思います。
コンテンツの表示ができない(403エラー)
ログを見るのが一番近道です。
例えばこんなログが出ていたとします。コンテンツは存在しており、ディレクトリの許可設定もしています。
[Tue Sep 28 22:25:16 2010] [error] [client xxx.xxx.xxx.200] (13)Permission denied: file permissions deny server access: /var/www/html/index.html
# view /etc/httpd/conf/httpd.conf <Directory "/var/www/html"> Options None AllowOverride None Order allow,deny Allow from all </Directory>
ただ、「/var/www/html/index.html」にApacheを実行しているユーザーからの読み取り権限が無いため、
403エラーとなってしまいました。適切に権限を与えてやればOKです。
# ls -la /var/www/html/ 合計 172 drwxr-xr-x 2 root root 4096 9月 21 20:15 . drwxr-xr-x 6 root root 4096 9月 20 17:44 .. -rw-r--r-- 1 apache apache 39185 8月 3 06:42 html-manager-howto.html -rwx------ 1 root root 146 9月 20 19:19 index.html -rw-r--r-- 1 apache apache 96097 8月 3 06:42 manager-howto.html
一方、ディレクトリ自体に許可権限が無い場合は以下のようなメッセージです。
[Tue Sep 28 22:33:30 2010] [error] [client xxx.xxx.xxx.200] client denied by server configuration: /var/www/html/index.html
# view /etc/httpd/conf/httpd.conf <Directory "/var/www/html"> Options None AllowOverride None Order allow,deny Deny from all </Directory>
「Allow from」「Deny from」の設定を適切に設定しなおせばよいかと思います。
CGIが実行できない
いろいろケースはあると思いますが、perlスクリプトを例としていくつかあげてみます。
こんな場合は、以下の2ケースが考えられます。
[Sun Oct 03 13:30:06 2010] [error] [client xxx.xxx.xxx.200] (2)No such file or directory: exec of '/var/www/cgi-bin/printenv' failed [Sun Oct 03 13:30:06 2010] [error] [client xxx.xxx.xxx.200] Premature end of script headers: printenv
- スクリプトの実行環境のパスが違う
スクリプト上は「#!/usr/local/bin/perl」と指定してあったが、実際のパスは「/usr/bin/perl」である場合などが考えられます。
- 改行コードがおかしい
改行コードがCRLFになっていたりすると、スクリプトを実行することができませんので、修正する必要があります。
以下のようなケースは所有者/所有グループ/パーミッション(実行権限が無いなど)に原因があると思われます。
スクリプトの権限を確認しましょう。
[Sun Oct 03 13:33:10 2010] [error] [client xxx.xxx.xxx.200] (13)Permission denied: exec of '/var/www/cgi-bin/printenv' failed [Sun Oct 03 13:33:10 2010] [error] [client xxx.xxx.xxx.200] Premature end of script headers: printenv
他にもいろいろあるとは思いますが、今日はこんなところで。