Blow Up by Black Swan

WEBサーバのインターフェイスのイメージはこんな感じだろうか・・・〜CGI, FastCGI, Apacheモジュール, WSGI〜

プログラミング初学者が初めてWEBアプリをデプロイする時、周辺知識の絶対的な不足と学習コスト、PaaSの使いやすさから、まずはHerokuなどにデプロイするのが良いとおっしゃる方が多い気がします。私もプログラミング初学者として、初めてのアプリを絶賛製作中ですが、まさにその通りだと思います。しかし、このブログを載せているエックスサーバを有料で借りてしまっているた、えどうしてもこのサーバを通しても有効活用したい、という貧乏根性が出てしまい、現在、WEBサーバやそのインターフェイス周りの学習に苦戦しています。

VPSと違い共有ホスティングのレンタルサーバは、アプリをデプロイするには逆に色々とややこしいんじゃないか、とは以前から薄々感じていましたが、未だ見て見ぬ振りしています(管理権限がない、利用可能なフォルダが限られているというのはやはり致命的じゃないかと思います・・・)。そんなこんなで、WEBサーバ周りを学習しているのですが、しょっぱなCGIなどのインターフェイス周りでかなり苦戦しました。丹念に読み込んでやっと、「なんとなく」理解できる段階までは来たのですが、その過程でイメージ図を作ってみたので、学習してわかった部分と併せて、今回ブログを投稿してみようと思います。もっと経験値が増してから、よりわかりやすくその違いなどの細部を説明できたらなとは思っています。

このイメージ図で理解が進まれる方もいるかもしれないと思いブログ記事を投稿しますが、あくまで「こんな感じじゃなかろうか」という私のイメージになりますので、参考程度で留めておいて頂ければ幸いです。

1. CGI

CGIイメージ

・特徴

  • Common Gateway Interfaceの略
  • 動的なサイトを構築するために考え出されたインターフェイス
  • リクエストごとに起動と停止が行われるため時間と負荷がかかる

2. FastCGI

FastCGIイメージ

・特徴

  • 時間と負荷がかかるというCGIの問題を解決するために生み出された
  • 常に起動されているため、軽量で早く、多くのリクエストを処理できる

3. Apacheモジュール

Apacheイメージ


・特徴

  • WEBサーバで最も使われるApacheの組み込みモジュール
  • mod_php、mod_wsgi、mod_pythonなど言語ごとに用意されている

4. WSGI

WSGIイメージ

・特徴

  • Pythonで利用されるWEBサーバとアプリケーションを繋ぐインターフェイスの仕様で、Web Server Gateway Interfaceの略。読み方は「ウィズギー」
  • Pythonのアプリケーションフレームワーク(Djangoやflaskなど)は大体準拠している
  • これを参考に、PHPやRubyなどでも同様のインターフェイスが誕生した模様
  • WSGIに準拠したサーバをWSGIサーバというが、アプリケーション部分も含めて、アプリケーションサーバと言われていたりもする
  • WEBサーバ部分の役割も実質的に担うが、リバースプロキシとしてnginxなどのWEBサーバを置くのが一般的