Ruby on Railsアプリケーションを本番環境で動作させるためのアプリケーションサーバとして、unicornがある
unicornは、Railsなどでつくられたアプリケーションを動かすアプリケーションサーバです。
unicornはプロセス上で動作するサーバで、プロセスには(1)masterプロセスと(2)workerプロセスがあります。 masterプロセスがアプリケーションのソースコードを保持しており、これをforkしたworkerプロセス群が実際のリクエストを処理します。
ソースコードをロードするのがmasterプロセスのみであるため、起動が早い、デプロイ時のダウンタイムがない、などのメリットがあります。
相違機能である nginxとの違い
nginxはクライアントからのリクエストを受け、なんらかの処理(SSLや圧縮など)を行なうWebサーバです。
単にアプリケーションを動作させるだけなら、nginxは必要ありません。
実際に、開発環境などではnginxなどなくても、unicorn(あるいはWEBrick、Puma)単体で動作します。
開発環境と本番環境の違いはリクエストの数で、unicornはworkerプロセスがせいぜい数個であるのに対し、nginxは数千ものコネクション数が存在します。 もしnginxを置かなければ、ネットワークの遅いクライアントが同時に接続してきたときにunicornプロセスをすべて占有してしまい、その他のクライアントからの接続を受け付けられなくなってしまいます。
nginxを置くことで、たくさんのリクエストを受け、それをunicornのプロセスにいい感じに振り分けています。