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を確認してみる。