今回はapache とcgi を繋げてみて、動作確認まで実施していきます。今更cgi かよ!!とか思わず、最後まで見ていただけますと幸いです。apache はデフォルトでcgi-bin の設定ができている状態なので、vhost を立てて、cgi を通していきます。
apache と cgi を繋ぐ
DocuemntRoot は任意で作成してください。私はテストでここに作成しました。
# DocumentRoot 作成
mkdir -p /var/www/example.com/public_html/
# conf ファイル作成
touch /etc/httpd/conf.d/example.com.conf
とりあえずファイル作成してみたら、vhost の設定していきます。
以下のconf の内容を貼り付けます。ここで一番重要なのが、Options のExecCGI とAddHandler cgi-script .pl .cgi になります。この設定をいれることによって、cgi の実行を明示的に許可することができます。
<VirtualHost *:80>
ServerName example.com
DocumentRoot "/var/www/example.com/public_html/"
DirectoryIndex index.php index.html index.xml
<Directory /var/www/example.com/public_html/ >
Options FollowSymLinks ExecCGI
AllowOverride all
AddHandler cgi-script .pl .cgi
</Directory>
CustomLog "/var/log/httpd/example.com-access_log" combined
ErrorLog "/var/log/httpd/example.com-error_log"
</Virtualhost>
この設定をいれたら、保存して、設定反映のためにapache の再起動を実施してください。そして、cgi のプログラムを配置していきます。cgi のプログラム自体は、public_html などのDocumentRoot におく必要はなく、/var/www/cgi-bin/ 配下にcgi のプログラム配置ファイルをおく必要があります。
public_html に置かなくても、cgi のプログラムを許可してるので、cgi の実行は外部ディレクトリから参照してくれて、実行することが可能です。便利ですね。ちょっとわかりづらいですが。
cgi-bin のディレクトリの権限と、cgiのファイルに実行権限を与えて上げます。
# 権限変更
chmod 2775 /var/www/cgi-bin/
# ファイル作成
touch /var/www/cgi-bin/test.cgi
簡単なプログラム内容
~~~~~~~~~~~~~~~~~~
#!/usr/bin/perl --
print "Content-Type: text/html\n\n";
print "test";
exit;
~~~~~~~~~~~~~~~~~~
# 実行権限付与
chmod +x /var/www/cgi-bin/test.cgi
そして、自分のドメインで以下のようにアクセスしてください。そうするとcgi が動作していると思います。
まとめ
cgi の構築とかあまりしたことがないので、仕組みがよくわかりませんでしたが、cgiを知るとfastcgi の理解もしやすいだろうと思い、少し勉強してみました。cgiのセキュリティ対策にはお気を付けて、良いcgi ライフを!!