Nginxのfastcgi cacheってリバースプロキシ?

Nginxをより高速に使うキャッシュ機能には、2種類ある。
・proxy cache
・fastcgi cache

この2つキャッシュの機能のうち、Nginxでリバースプロキシを設定する、といった記事で紹介されるのはproxy cacheの方だ。
なので、リバースプロキシ=proxy cacheだと思ってた。

じゃあ、fastcgi cacheはリバースプロキシではないの?

1. リバースプロキシとは

リバースプロキシとは何か。
以下の2つの記事を読む。

Reverse Proxy がなぜ必要か – naoyaのはてなダイアリー

Reverse Proxyがなぜ必要か、勝手に補遺 – たごもりすメモ

最初の記事でリバースプロキシは

「全体のリソース効率を上げましょう」というためのもの

と紹介されている。

ここでいうリソースは、サーバのCPUやメモリなんかのこと。
このサーバ(さくらVPS1G)の場合は、CPUは2コア、メモリは1Gである。

では、リソース効率を上げるとはなにか?

このCPU2コアとメモリ1Gを、どのように有効に使うかということだ。
リバースプロキシでリソース効率を上げるには、以下のことを行う。

  1. フロントエンドで捌けるものはフロントエンドで処理する
  2. バックエンドでしか捌けないものはバックエンドで処理する

 

このフロントエンドがリバースプロキシとなる。
リバースプロキシの機能は主に2つ。

  1. 静的ファイルへのリクエストを処理する
  2. 動的ファイルへのリクエストをバックエンドへ送る

 

静的ファイルには、CSSやJavaScript、画像などになる。
動的ファイルは、アプリケーションなどスクリプト言語で作られたファイルなど。

このような2段階で処理を行う理由は、バックエンドのアプリケーションサーバがメモリを大量に消費するためである。

そのため、バックエンドが静的ファイル・動的ファイル両方を処理するよりも、フロントエンドが静的ファイルを、バックエンドが動的ファイルを処理するほうが効率が良くなる。

また、2つ目の記事では、リソース効率向上について複合的な視点で取り上げられている。

・通常時のトラフィック配信におけるCPU・メモリ使用率を最適化する
・バースト時(過負荷時)のトラフィックをより細かく制御可能とする
・障害時におけるダウンタイムおよび総合的な計算・配信能力の低下を極小化する
・多数のサーバによる構成全体を増強・入れ替え・移動あるいは削減する際の自由度の向上を狙う

fastcgi cache=リバースプロキシとするためには、この辺がキモになってくる。

2. fastcgi cacheとは

リバースプロキシの意味や役割はぼんやりとだがわかった。

では、fastcgi cacheとはなにか。
proxy cacheと対比させながら考える。

なにわともあれ、下記2つのサイトの図が、とても参考になる。
ただ、1つ目のサイトと2つ目のサイトの図は違うので注意。

Nginxを使ったもう一歩進んだWordPressチューニング | cloudrop

Nginx のFastCGIキャッシュ(fastcgi cache )を使ってみた

1つ目の図はwebサーバを除いているの対し、2つ目の図はproxyサーバを除いている。
とりあえず、1つ目のサイトを参考とする。

fastcgi cacheとは、バックエンドのFastCGIレスポンスをキャッシュする機能。

一方、proxy cacheは、バックエンドからのレスポンスがどんなアプリケーションのものでも問わずキャッシュする機能。

つまり、両者の違いは受け付けるレスポンスの違いだけである(多分)。
fastcgi cacheはFastCGIに絞ったキャッシュ機能であり、proxy cacheはより汎用的なキャッシュ機能であるということ。

fastcgi cacheはFastCGIのみに絞ることで、バックエンド部分にWebサーバを置かなくて良くなる。
つまり、バックエンドは完全にFastCGIのみしか必要とせず、より高速・軽量なキャッシュ機能を提供できるということになる。

3. 結論

fastcgi cacheもリバースプロキシだと言ってしまってもいいような気がする。

リバースプロキシの目的の「全体のリソース効率を上げる」には適っているし、proxy cacheとの主な違いもキャッシュ対象のみだ(多分)。

が、Nginx のFastCGIキャッシュ(fastcgi cache )を使ってみたでは、proxyサーバがなくなったことで、サーバの分散化は図れていないとも書かれていた。

fastcgi cacheは、バックエンドのwebサーバをなくすのか、proxyサーバをなくすのかも自身がない。
自分はwebサーバをなくしていると思っているのだけど・・・

サーバの分散化は、リバースプロキシの目的の一つであるサーバの増強・入れ替え・移動・削減などに寄与するのだろう。
その場合、fastcgi cacheはリバースプロキシでないということになる。

結論が出ない。。。

ので、無理やり結論。
fastcgi cacheはリバースプロキシだということにする。

知っている人いたらご連絡くださいm(__)m

とりあえず当ブログサーバはfastcgi cacheを使うよー

コメント

タイトルとURLをコピーしました