自宅サーバーのCGIが動かない!
2006年1月15日 掲載
自宅サーバーにApacheをインストールし、cgiを実行できるように設定した。しかし、cgiのプログラムを設置してもうまく動かない。そんなときは次のようなポイントをチェックしよう。
- 「Internal Server Error」と表示される場合
- ftpクライアントでcgiプログラムをアップロードするときに「テキストモード」や「アスキーモード」を選択する。これはWindowsの改行コードがCR+LFであるのに対し、LinuxがLFを用いているため。「バイナリーモード」でアップロードすると改行コードの違いからトラブルを起こす。Windowsでcgiプログラムを編集するときに、エディタで改行コードをLFに設定できるのであれば、別にバイナリーモードでアップロードしてもかまわない。
- cgiプログラムの1行目で指定するperlのパスが正しいかを確認する。Vine Linuxでは1行目が「#!/usr/bin/perl」となっていなければならない。できあいのcgiプログラムではここが「#!/usr/local/bin/perl」となっていることも多い。
- cgiプログラムのパーミッション(許可属性)を確認する。cgiプログラムは「755」(所有者はすべて許可。それ以外は読み出しと実行のみ許可)に設定するのが基本。
- サーバーにPerlがインストールされているか。コマンドラインで「which perl」と入力し、「/usr/bin/perl」と表示されるか確認する。もしインストールされていないときは、スーパーユーザーで「apt-get install perl」と入力してPerlを組み込む。
- 「Forbidden」と表示される場合
- cgiプログラムだけでなく、ディレクトリのパーミッションにも注意が必要だ。cgiプログラムを格納するディレクトリのパーミッションも「755」にしておく。
- cgiの実行の許可をしていないディレクトリにcgiプログラムをアップロードしている。ディレクトリでcgiプログラムを利用できるようにするには、httpd.confで「Options ExecCGI」という記述が必要である。
- 「Not Found」と表示される場合
- アップロードするディレクトリを間違えてはいないか。標準の設定ではhttpd.confに「ScriptAlias /cgi-bin/ /home/httpd/cgi-bin/」という記述がある。「/home/httpd/html/cgi-bin」ではなく、「/home/httpd/cgi-bin」にアップロードする必要がある。
- cgiプログラムがそのまま表示される場合
- httpd.confで「#AddHandler cgi-script .cgi」の行のコメントアウトを解除する。コメントされたままでは、拡張子cgiのファイルが実行可能なcgiプログラムとして認識されない。