Linux/Server設定

自宅サーバーのCGIが動かない
2013/07
「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プログラムとして認識されない。
http://www.jitaku-server.net/apache_cgi_trouble.html