サーバーでもUbuntuを使っています

メインはWindows 7ですが、時々Ubuntuデスクトップやサーバーを使っています。Ubuntuサーバーで操作が困ったときに対処した内容をまとめています。間違いがあれば教えてください。

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

の設定を書き加えます。 

f:id:linux_user:20131017234404p:plain

 書き換えた設定を反映するために、Apacheの設定を再度読み込ませます。

$ sudo service apache2 reload

 これで完了です。