PythonのCGIとは?仕組みとサーバー設定方法をわかりやすく解説
CGI(Common Gateway Interface:共通ゲートウェイインターフェース)は、HTTPサーバーなどの情報サーバーと外部のゲートウェイプログラムがやり取りするための標準規格です。
- 現在のバージョンはCGI/1.1であり、CGI/1.2が策定中です。
Webブラウジングの流れ
CGIの概念を理解するために、ハイパーリンクをクリックして特定のWebページやURLを閲覧するときに何が起こるのかを見てみましょう。
- ブラウザがHTTP Webサーバーに接続し、URL(つまりファイル名)を要求します。
- WebサーバーはURLを解析してファイル名を探します。該当するファイルが見つかればそれをブラウザへ送り返し、見つからなければ「誤ったファイルが要求された」ことを示すエラーメッセージを返します。
- ブラウザはWebサーバーからの応答を受け取り、取得したファイルまたはエラーメッセージを表示します。
CGIの役割
しかし、HTTPサーバーを設定することで、特定のディレクトリ内のファイルが要求された際に、そのファイルをそのまま返すのではなく、プログラムとして実行し、そのプログラムが出力した結果をブラウザに返して表示させることが可能です。
この機能こそがCommon Gateway Interface(CGI)と呼ばれるもので、実行されるプログラムはCGIスクリプトと呼ばれます。CGIプログラムには、Pythonスクリプト、Perlスクリプト、シェルスクリプト、CやC++のプログラムなど、さまざまな言語を使用できます。
CGIアーキテクチャ図

Webサーバーのサポートと設定
CGIプログラミングを始める前に、使用しているWebサーバーがCGIをサポートしており、CGIプログラムを処理できるように設定されていることを確認しましょう。
HTTPサーバーによって実行されるすべてのCGIプログラムは、事前に設定された専用ディレクトリに配置されます。このディレクトリはCGIディレクトリと呼ばれ、慣例として /var/www/cgi-bin という名前が使われます。また、CGIファイルの拡張子は慣例上 .cgi ですが、Pythonの拡張子である .py のまま使用しても問題ありません。
CGI実行ディレクトリの変更方法
デフォルトでは、Linuxサーバーは /var/www 配下の cgi-bin ディレクトリにあるスクリプトのみを実行するように設定されています。別のディレクトリでCGIスクリプトを実行したい場合は、httpd.conf ファイル内の以下の記述をコメントアウト(または編集)してください。
<Directory "/var/www/cgi-bin">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>
<Directory "/var/www/cgi-bin">
Options All
</Directory>
以降の説明では、Webサーバーが正常に稼働しており、Perlやシェルスクリプトなど、他の種類のCGIプログラムも実行できる状態になっていることを前提としています。
-
Pythonのosモジュール入門:ディレクトリ操作とファイル操作の基本をマスターしよう
はじめにPythonのosモジュールは、開発者が実行中のオペレーティングシステム(OS)とやり取りするためのさまざまな関数を提供する標準ライブラリです。この記事では、その中でも特によく使われる以下の操作について解説します。ディレクトリ(フォルダ)の作成・削除ディレクトリ名の変更ファイル操作の基本それでは、早速始めていきましょう。準備:モジュールのインポートosモジュールはPythonのインストール時に同梱されているため、PIPなどで別途インストールする必要はありません。各種メソッドや関数を使うには、モジュールをインポートするだけです。import osこれで、osモジュールが提供するさまざまな
-
PythonのCGIとは?仕組みとサーバー設定方法をわかりやすく解説
CGI(Common Gateway Interface:共通ゲートウェイインターフェース)は、HTTPサーバーなどの情報サーバーと外部のゲートウェイプログラムがやり取りするための標準規格です。現在のバージョンはCGI/1.1であり、CGI/1.2が策定中です。Webブラウジングの流れCGIの概念を理解するために、ハイパーリンクをクリックして特定のWebページやURLを閲覧するときに何が起こるのかを見てみましょう。ブラウザがHTTP Webサーバーに接続し、URL(つまりファイル名)を要求します。WebサーバーはURLを解析してファイル名を探します。該当するファイルが見つかればそれをブラウザへ