もともとの Web サーバは、あくまでも「受け取った URI に従った静的なコンテンツを返す」ものでしかありませんでした。
ですが単純なページならともかく、検索などをしたい場合にこれでは困ってしまいます。
そこで Webサーバがある種のリクエストを受け取った場合に
- リクエストに含まれる情報を渡して別のプロセスを起動して
- そのプロセスの出力(標準出力)の内容を、Web サーバはコンテンツとしてリクエスト元に返す
という仕組みが考え出されました。
この仕組みのことを「Common Gateway Interface」と言い、これが(狭義の)CGIとなります。
一般的に使われる意味での CGI は CGI プログラムのことで、つまりは「CGI の仕組みに従って動作する何らかのプログラム」を指します。
その意味では PHP のコードも(CGI として)動作させることもできます。
また、モジュール化されて httpd と一体化することもありますが、その際もデータのやりとり自体は CGI の仕組みに従って行われる(特に入力について)ようになっています。