Ubuntu ServerでCGIプログラムを動作させる
以前(正確にどのバージョンだったかは不明)は、Webサーバーソフト「Apache HTTP Server」(以下、Apache)をインストールし、「/usr/lib/cgi-bin」ディレクトリーにCGIプログラムを格納して適切にアクセス権限を設定すれば、問題なくCGIプログラムが動作していました。Ubuntu Server 13.10で試したところ、「HTTP 404」(コンテンツがありません)のエラーになってぜんぜん動作しませんでした。
Ubuntu Server 13.10では、以下の設定が必要です。まず、Apacheは、次のコマンドでインストールします。
$ sudo apt-get update
$ sudo apt-get -y install apache2
インストールが完了すると、ドキュメントディレクトリーの「/var/www」、設定ファイル格納用ディレクトリーの「/etc/apache2」、CGIプログラム格納用ディレクトリーの「/usr/lib/cgi-bin」などが作成されます。
CGIプログラムを動作させるには、cgidのモジュールを読み込む設定(cgid.load)と、ソケットの定義(cgid.conf)、「/usr/lib/cgi-bin」ディレクトリーに格納したCGIプログラムを実行可能にする設定(serve-cgi-bin.conf)が必要です。後者のserve-cgi-bin.confは「/etc/apache2/conf-available」ディレクトリー内に存在し、「/etc/apache2/conf-enabled」ディレクトリーにリンクが作成されているので、有効になっています。しかし、前者の2つのファイルは「/etc/apache2/mods-available」ディレクトリー内に存在しますが、「/etc/apache2/mods-enabled/」ディレクトリー内にリンクがないので有効になっていません。次のコマンドで有効にします。
$ sudo a2enmod cgid
これで、Apacheを再起動すれば、CGIプログラムが動作します。
$ sudo service apache2 restart
しかし、このままでは「/usr/lib/cgi-bin」を格納しているすべてのファイルがCGIプログラムとして判断されてしまいます。フリーで配布されているCGIプログラム(電子掲示板や会議室など)の多くは、CGIプログラムとデータを格納しているディレクトリーを同じディレクトリー内に配置します。よって、画像ファイルなどを表示させようとしたときに、CGIプログラムと判断されてエラーになってしまいます。
そんなことがないように「/etc/apache2/conf-enabled/serve-cgi-bin.conf」ファイルに画像ファイルと判断するような設定を記述します。まずは、エディタでこのファイルを開きます。
$ sudo vi /etc/apache2/conf-enabled/serve-cgi-bin.conf
開いたら、「</Directory>」の直前に、
AddHandler image/gif .gif
AddHandler image/png .png
AddHandler image/jpg .jpg .jpeg
の設定を書き加えます。
書き換えた設定を反映するために、Apacheの設定を再度読み込ませます。
$ sudo service apache2 reload
これで完了です。