Drupalの例を使用した匿名ユーザーのNginxキャッシュ

ご存知のように、Drupalは非常に重いCMS / CMFの例であり、ロードされたサイトの構築はそれほど単純ではありません。 私の会社は主に開発にDrupalを使用しているため、パフォーマンスの最適化に対処する必要がある場合があり、負荷の処理方法についてお話したいと思います。



この記事では、生産性を向上させる最も効果的な方法の1つ、つまり匿名ユーザー向けにnginx Webサーバーのコンテンツをキャッシュする方法について説明します。 この方法のおかげで、匿名ユーザーからのリクエストはバックエンドへのアクセスを引き起こしません(Apacheとfastcgiのどちらでもかまいません)。 したがって、このようなキャッシュは、CMSよりも効果的です。





問題の声明



Drupalには匿名ユーザー用の組み込みキャッシュがあります。 ただし、非常に非効率的に機能し、トラフィックが多いとかなり多くの問題が発生します。 したがって、少なくとも2つの対策を適用するのが妥当です。

1. nginxを使用して匿名ユーザーのコンテンツをキャッシュする

2. cache_formおよびcache_filterテーブルをCacherouter + APCに保存します



Drupal



匿名ユーザーとログインユーザーを区別するために、ログイン時とログアウト時にCookieを発行します-Cookieを選択します。 小さなnginxcacheモジュールを書きましょう:



nginxcache.info

name = Nginx cache

description = Nginx cache for anonymous users

package = ISFB

version = VERSION

core = 6.x








nginxcache.module

<?php

function nginxcache_user($type, &$edit, &$user) {

switch($type){

case 'login' :

setcookie('logged', TRUE, time()+60*60*24*30, "/");

break;

case 'logout':

setcookie('logged', FALSE);

break;

}

}








セッションテーブルをクリアし、キャッシュしてモジュールをオンにします。



nginx



設定全体を提供するのではなく、記事に関連するものだけを説明します。



httpセクションでは、ゾーンを宣言する必要があります。

proxy_cache_path /var/nginx/cache levels=1:2 keys_zone=hrportal:10m inactive=60m;







最初に、必要な権限で/ var / nginx / cacheディレクトリを作成する必要があります。 キャッシュデータが非アクティブな時間にアクセスされない場合、鮮度に関係なく削除されます。



ローカルに必要な仮想ホストで、次のように記述します。

proxy_cache hrportal;

proxy_cache_key $host$uri?$args;

proxy_no_cache $cookie_logged;

proxy_cache_bypass $cookie_logged;

proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;

proxy_pass_header Set-Cookie;

proxy_ignore_headers "Expires" "Cache-Control";

proxy_cache_valid 200 301 302 304 1h;








proxy_no_cache-ディレクティブは、ログが記録されたCookieがある場合、応答がキャッシュに保存されない条件を設定します。 このディレクティブを忘れると、許可されたユーザーの応答がキャッシュに書き込まれ、匿名および他の許可されたユーザーに与えられます。

proxy_cache_bypass-Cookieがログに記録されているユーザーの場合、応答はキャッシュから取得されません

proxy_cache_use_stale-バックエンドが利用できない場合、キャッシュから古いレスポンスを与えることができます、非常に便利です

proxy_pass_header-クッキーを受け取るためにユーザーが必要です

proxy_ignore_headers-Drupalは常にこれらのヘッダーを送信しますが、無視するよう強制されます

proxy_cache_valid-応答キャッシュ時間を設定します



結果



ご存知のように、検索エンジンはサイトのパフォーマンスを分析し、それ以上のユーザーをサイトに誘導することはありません。 これは、PSからのトラフィックを処理するパフォーマンスを欠いたPSの観点から見た高品質のサイトの例ですグラフからわかるように、このソリューションをインストールした後、トラフィックが増加し始めました。

このサイトはCMS Drupalを使用しており、VPSテクニカルサイトにあります。



PSこのアプローチは、もちろんすべてのCMSに適用されます。



UPD。 なぜブーストしないのかという質問を繰り返し聞いています。

答えは非常に複雑です。 説明しようとします。

まず最初に、あなたが正しく指摘したように-私のソリューションはボックス化されておらず、トラフィックが本当に多いときに適用されるべきです-生産性を高める方法は重要です。



1. nginxフロントエンドは、バックエンドとは別のサーバーに配置できます-キャッシュはそこにあります-そして、はるかに速く配信されます

2. nginxはどのような場合でも静的を高速に提供します

3. Drupalはnginxの上に立つことができます-この場合、ブーストブーストをやり直す必要があります-必要ですか?

4.ブーストの場合、キャッシュタスクはバックエンドに与えられます-これはフロントエンドで直接実行できます



All Articles