目次

webサーバ・アプリケーションサーバ

元記事:
A Web Server vs. An App Server
http://www.justinweiss.com/articles/a-web-server-vs-an-app-server/

webサーバ

・原文

A web server is a program that takes a request to your website from a user and does some processing on it. Then, it might give the request to your Rails app.

・機械翻訳+α

webサーバーはユーザーからの自サイトへのリクエストを受け取り、いくつかの処理をするプログラムです。そして、場合によってはあなたのRailsアプリにリクエストを投げます。

ApacheNginxなど、ユーザーからのリクエストを最初に受け取る一般的な「webサーバ」。
静的コンテンツやキャッシュなど、自身でレスポンスまで処理する場合もあれば、Railsアプリに処理させるために後ろに構えている「アプリケーションサーバ」に投げることもある。

アプリケーションサーバ

・原文

An app server is the thing that actually runs your Rails app.

・機械翻訳+α

アプリケーションサーバは、実際にあなたのRailsアプリを実行する物である。

Railsアプリをメモリに保持しておき、webサーバからのリクエストを受け取るとアプリに受け渡す。
アプリがリクエストを処理すると、アプリケーションサーバがwebサーバにレスポンスを返す。
UnicornThinPumaなど。

Passenger

・原文

But it can also be built right into a web server, so you don’t need a separate app server to run your Rails apps.

・機械翻訳+α

しかし、webサーバに組み込むこともできます。そうすれば、Railsアプリを動作させるためのアプリケーションサーバを別に用意する必要はない。

「アプリケーションサーバ」のように動くこともできるが、ApacheやNginxの拡張モジュールとして組み込む事例が大半。
ただし、Apacheは拡張モジュールとしての扱いは容易だが、Nginxでは若干の改造やリビルドが必要。

Rack

・原文

You can think of Rack as a common language that Ruby web frameworks (like Rails) and app servers both speak.

・機械翻訳+α

RackはRailsのようなRuby製のフレームワークとアプリケーションサーバの両方が話せる共通言語と思ってください。

まとめると

・Passenger以外の場合

  1. webサーバ(Nginxなど)がwebリクエストを受け取り、Railsで処理するものであればアプリケーションサーバに渡す
  2. アプリケーションサーバ(Unicornなど)はRackを使ってRailsアプリケーションに処理を依頼する
  3. Railsアプリケーションがリクエストを処理すると、Rackを使ってアプリケーションサーバに返す
  4. アプリケーションサーバはwebサーバに返す
  5. webサーバはクライアントにレスポンスを返す

・Passengerの場合

  1. webサーバ(Apacheなど)がwebリクエストを受け取り、Railsで処理するものであればPasseger+Rackを経由してRailsアプリケーションに渡す
  2. Railsアプリケーションがリクエストを処理すると、Rack+Passenger経由でwebサーバに返す
  3. webサーバはクライアントにレスポンスを返す