サーバの役割
ウェブサーバは通常、サーバ上にある静的なファイル(*.htmlや*.jpgなど)をリクエストに応じて送り返します。
このため、リクエストによって内容を変化させたりなど、動的な内容を送り返す事ができません。
プログラムの概念
RubyやPerl、Cなどのプログラムは、ある入力を与えるとそれに応じて処理を行い、結果を返します。コンピュータはすべてこの「入力・処理・出力」の組み合わせでできています。
CGIとは、ウェブサーバに動的な内容を送り返させるようにする仕組みです。ウェブサーバに組み込む事によって、CGIを仲介してプログラムを動かす事ができます。
ウェブサーバは、クライアントからリクエストを受け取り、これが*.cgiファイルだった場合、CGIにリクエストの内容を渡します。CGIは更に、指定されたファイルをプログラムとして動かします。このとき、リクエストの内容をプログラムへの入力として渡します。このとき、プログラムファイルは実行可能権限である必要があります。プログラムの処理が終わると、その出力をCGIはウェブサーバへ戻し、ウェブサーバはそれをクライアントへ送り返します。