エラーメッセージとその対処あれこれ

今回は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


他にもいろいろあるとは思いますが、今日はこんなところで。