CGIが動かない

公開サーバ化して数日。FTPも(ナイショだけどTelnetも・・・)無事に外部からアクセスできるようになった。ルーターのポートを空けるぐらいでたいした手間はかからなかった。

ところがWebサーバでひとつ問題が発生。
普通のhtmlファイルは見れる(=daemonは動いてる)のにCGIがエラーになって動かない。
エラーの中身は

Server error!
The server encountered an internal error and was unable to complete your request.

Error message:
Premature end of script headers: (略).cgi

「Premature end of script headers」をキーにググってみると、

1.cgiスクリプトの改行コードが正しくない.
サーバー上で cat -v ファイル名 として,行末に ^M がついている場合がこのケースです.
DOSの改行コードで作成されたcgiファイルをftpで転送する場合,RedHat-8以降で標準の vsftpd の初期設定の問題から,ASCIIモードで転送したつもりでも,binary モードで転送されてしまいます.
/etc/vsftpd/vsftpd.conf の以下の箇所をアンコメントすれば,ASCII転送ができるようになります.
#ascii_upload_enable=YES
#ascii_download_enable=YES

とある。

どうやらRedhatLinux9ではvsftpd(FTPデーモン)はDefaultではasciiモードでは受け取ってくれないらしい。FTPクライアントはAsciiで送っているつもりでも、FTPデーモンはBinaryで受けちゃうようだ。

とりあえず/etc/vsftpd/vsftpd.confを確認してみる。