27.5 CGIスクリプトを実行させる

ApacheのCGI (Common Gateway Interface)により、通常CGIスクリプトとして呼ばれるスクリプトまたはプログラムを含んだ動的コンテンツを作成できます。CGIスクリプトは、どのプログラム言語でも作成できます。通常、PerlまたはPHPなどのスクリプト言語が使用されます。

ApacheがCGIスクリプトによって作成されたコンテンツを配信できるようにするには、mod_cgiを有効化する必要があります。また、mod_aliasも必要です。デフォルトでは、両モジュールとも有効化されています。モジュールの有効化の詳細については、セクション 27.4.2, 有効化と無効化を参照してください。

警告: CGIセキュリティ

サーバがCGIスクリプトを実行できるようになると、潜在的なセキュリティホールが発生します。詳細については、セクション 27.7, セキュリティ問題の回避を参照してください。

27.5.1 Apacheの設定

SUSE Linux Enterprise Serverでは、CGIスクリプトの実行は、/srv/www/cgi-bin/ディレクトリでのみ許可されています。この場所は、すでにCGIスクリプトを実行するように設定されています。仮想ホスト設定を作成しておらず(仮想ホスト設定を参照してください)、ホスト固有のディレクトリにスクリプトを配置する場合は、このディレクトリのロックを解除し、設定する必要があります。

例 27-5 VirtualHost CGIの設定

ScriptAlias /cgi-bin/ "/srv/www/www.example.com/cgi-bin/"

<Directory "/srv/www/www.example.com/cgi-bin/">
 Options +ExecCGI
 AddHandler cgi-script .cgi .pl
 Order allow,deny
 Allow from all
</Directory>

このディレクトリ内のすべてのファイルをCGIスクリプトとして処理するようにApacheに指示します。

CGIスクリプトの実行を有効化します。

.plおよび.cgiの拡張子が付いたファイルをCGIスクリプトとして処理するようにサーバに指示します。必要に応じて調整します。

OrderAllowディレクティブは、デフォルトのアクセス状態、およびこれらのディレクティブが評価される順序を制御します。この場合、allow文およびすべての場所からのアクセスが有効化される前に、deny文が評価されます。

27.5.2 テストスクリプトの実行

CGIプログラミングは通常のプログラミングとは異なり、CGIプログラムとスクリプトの前にContent-type: text/htmlなどのMIMEタイプヘッダを記述する必要があります。このヘッダはクライアントに送信されるので、クライアントは、受信したコンテンツによってコンテンツの種類を識別します。次に、このスクリプトの出力は、通常、Webブラウザなどのクライアントが認識できる形式(たいていの場合はHTML、プレーンテキスト、画像など)でなければなりません。

Apacheパッケージの一部として、/usr/share/doc/packages/apache2/test-cgi内に簡単なテストスクリプトが含まれています。このスクリプトは、いくつかの環境変数の内容をプレーンテキストとして出力します。このスクリプトを/srv/www/cgi-bin/か、仮想ホストのスクリプトディレクトリ/srv/www/example.com_cgi-bin/のいずれかにコピーし、「test.cgi」という名前を付けます。

Webサーバによってアクセス可能なファイルは、rootユーザが所有する必要があります(詳細については、セクション 27.7, セキュリティ問題の回避を参照してください)。Webサーバは別のユーザ名で実行しているので、CGIスクリプトはworld-executableおよびworld-readableである必要があります。CGIディレクトリに移動し、chmod 755 test.cgiコマンドを使用して適切なパーミッションを適用します。

次に、http://localhost/cgi-bin/test.cgiまたはhttp://www.example.com/cgi-bin/test.cgiを呼び出します。CGI/1.0 test script reportを参照してください。

27.5.3 トラブルシューティング

テストプログラムの出力の代わりにエラーメッセージが表示される場合は、次を確認します。

CGIトラブルシューティング

  • 設定を変更した後、サーバを再ロードしましたか?rcapache2 probeを使用して確認します。

  • カスタムCGIディレクトリを設定した場合、適切に設定されていますか?不明な場合は、デフォルトのCGIディレクトリの/srv/www/cgi-bin/内にあるスクリプトを実行し、http://localhost/cgi-bin/test.cgiを呼び出します。

  • ファイルのパーミッションは正しいですか?CGIディレクトリに移動し、ls -l test.cgiを実行します。その出力が次で始まっているかどうかを確認します。

    -rwxr-xr-x  1 root root
  • そのスクリプトにプログラミングエラーがないかどうか確認します。test.cgiを変更しなかった場合は該当しませんが、独自のプログラムを使用する場合は、常にプログラミングエラーがないかどうか確認してください。