net-nyan-cat

俺たちがインフラ野郎Aチーム

Nginxのキャッシュについて(fastcgi_cache, proxy_cache)

Nginxのキャッシュは2つの種類があり、それぞれで動作が異なるんですよね。
たまーに設定しようとすると特性を忘れる傾向にあるのでメモ程度に。

 

Nginxのキャッシュ機構の種類は2つに分けられます。

 ・fastcgi_cache

 ・proxy_cache

 

・nginxをリバースプロキシとして動作させるかどうか
・静的コンテンツをキャッシュさせたいかどうか
でどちらを選択するか決めるべきかと私は思っています。

 

f:id:xrzhev:20200312132414p:plain

例:WordPress環境を1サーバーで作ってみた時のイメージ


【概要】

fastcgi_cacheは名前の通り、FastCGIで実行された動的コンテンツ(PHP等)を
キャッシュしてくれる機構です。
FastCGIの処理やDBのアクセス等がキャッシュによって大幅に減少します。
WordPressなど、ユーザーに対してコンテンツの内容が変動しないアプリケーションに対して親和性が高く、WordPressの表示速度がn倍!なんて例も見られますね。
実際スピードアップするケースが多いですし、設定も比較的簡単で導入も楽です。

 

【ポイント】

・動的コンテンツを実行後、静的コンテンツのような形として指定ディレクトリに
 キャッシュしている。

・キャッシュ対象は動的コンテンツのみで静的コンテンツ(画像, js, css等)は
 キャッシュしてくれない。

f:id:xrzhev:20200312145530p:plain

キャッシュされたWordPressのサイト。 HTMLが見えます。

 

 

  • proxy_cacheについて

    f:id:xrzhev:20200312151048p:plain

    例:プロキシキャッシュ有効の1サーバーでWordPress

【概要】

proxy_cacheはnginxのリバースプロキシ機能を利用する場合、バックエンドサーバから返された動的コンテンツ、静的コンテンツをキャッシュしてくれる機構です。
バックエンドサーバといいつつもリバースプロキシサーバを80, 443ポートで待ち受けさせ、バックエンドサーバを別のポートで動作させることでサーバ1台でproxy_cache機能を有効にすることができます。

【ポイント】

・設定がちょっとややこしい

・静的コンテンツをキャッシュしてくれるため、画像が多いサイトにいいかも

 

 個人的にはサーバ1台だったらfastcgi_cacheでいいと思ってます。
サーバ1台だけだと結局proxy_cacheの静的コンテンツキャッシュってあんま意味ないと思うんですよね…。

キャッシュ自体はハマるポイントも多いですが、サーバの性能を最大限に引き出すことができる技術でもあるので、積極的に利用していきたいですね。

 

fastcgi_cacheの設定方法

・proxy_cacheの設定方法

・キャッシュ無し、fastcgi_cache、proxy_cacheの性能比較テスト


なんかも近いうちにやろうと思います。