====== 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アプリにリクエストを投げます。 **Apache**や**Nginx**など、ユーザーからのリクエストを最初に受け取る一般的な「**webサーバ**」。 静的コンテンツやキャッシュなど、自身でレスポンスまで処理する場合もあれば、Railsアプリに処理させるために後ろに構えている「**アプリケーションサーバ**」に投げることもある。 ===== アプリケーションサーバ ===== ・原文 > An app server is the thing that actually runs your Rails app. ・機械翻訳+α > アプリケーションサーバは、実際にあなたのRailsアプリを実行する物である。 Railsアプリをメモリに保持しておき、webサーバからのリクエストを受け取るとアプリに受け渡す。 アプリがリクエストを処理すると、アプリケーションサーバがwebサーバにレスポンスを返す。 **Unicorn**、**Thin**、**Puma**など。 ===== 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以外の場合 - webサーバ(**Nginx**など)がwebリクエストを受け取り、Railsで処理するものであればアプリケーションサーバに渡す - アプリケーションサーバ(**Unicorn**など)は**Rack**を使ってRailsアプリケーションに処理を依頼する - Railsアプリケーションがリクエストを処理すると、Rackを使ってアプリケーションサーバに返す - アプリケーションサーバはwebサーバに返す - webサーバはクライアントにレスポンスを返す ・Passengerの場合 - webサーバ(**Apache**など)がwebリクエストを受け取り、Railsで処理するものであればPasseger+Rackを経由してRailsアプリケーションに渡す - Railsアプリケーションがリクエストを処理すると、Rack+Passenger経由でwebサーバに返す - webサーバはクライアントにレスポンスを返す