CGIを使えるようにする
ApacheでCGIを使えるようにするための設定です。注意なのはパーミッションの設定で、これをきちんと意識しないとうまく動きません。
◆セキュリティ設定
なくても動きますが、クラッカー対策に。
$ sudo emacs -nw /etc/apache2/conf.d/security
# 27行目:変更
ServerTokens Prod
# 39行目:変更
ServerSignature Off
◆MIMEの編集
プログラム用のファイルタイプを登録します。
AddHandler MIMEタイプ 拡張子 拡張子 ...
と記述することで、その拡張子を持ったファイルをどういう動作で動かすかを設定します。今回はCGIを使うので「.cgi , .pl」といったファイルを登録します。
$ sudo emacs -nw /etc/apache2/mods-enabled/mime.conf
# 218行目:コメント解除し、CGIとして扱う拡張子を設定
AddHandler cgi-script .cgi .pl
ちなみにこれはmime.confをいじらなくても、次のディレクティブ設定で同じ事を書けば使えるようになります。すべての実行できるのはセキュリティ的にちょっと・・・という人はディレクティブ設定で指定する方がいいと思います。
◆ディレクティブ設定
$ sudo emacs -nw /etc/apache2/sites-available/default
<Directory /var/www/>
#ExecCGIを追加
Options Indexes FollowSymLinks MultiViews ExecCGI
#MIMEでは設定しない場合は以下のように。今回はMIMEなのでコメントアウト
#AddHandler cgi-script .cgi .pl
AllowOverride None #CGIの挙動を.htaccessで制御するならAll
Order allow,deny
allow from all
</Directory>
設定が完了したらApacheを再起動します。
$ sudo /etc/init.d/apache2 restart
◆シンボリックリンクの作成
$ sudo ln -s /usr/bin/perl /usr/local/bin/perl
これはなくてもいいです。ただLinuxのディストリビューションの違いでperl の実行ファイルが /usr/bin/perl だったり /usr/local/bin/perl だったりするので、書き換えが面倒にならないようにリンクを貼っておくことをオススメします。
◆確認ページの作成
$ sudo emacs -nw /var/www/index.cgi
#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
print <<"EOM";
<html>
<body>
<div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;">
CGI Test Page
</div>
</body>
</html>
EOM
exit;
パーミッションの変更をします。
$ sudo chmod 705 /var/www/index.cgi
これで「CGI Test Page」と大きな文字で表示されればOKです。テストページのソースがテキストのまま表示されたらCGIが使えてません。「500エラー」などが出る場合は
$ less /var/log/apache2/error.log
でエラーの原因を探ってください。
◆パーミッションについて
パーミッションについてです。注意として以下になります。
・700なら所有者はwww-data
・705以上なら所有者は誰でもOK
これを意識しないとよく「500エラー」や「403エラー」が起きます。
ソース:
Apacheのインストール・設定
CGI のためのウェブサーバ設定
ServerTokensによるサーバ情報表示の抑止