すべての人のためのnginxの透過的なキャッシュ

ハブからのリンクが定期的に提供されるサイトがあると想像してください。

私たちは彼が出席者の急激な爆発に備えるために準備する必要があります。 どうやってやるの?



バージョン0.8.46以降、nginxには、匿名ユーザー用の透過キャッシングを簡単かつ簡単に設定できるオプションが導入されています。



このスキームの操作には、サイトはほとんど必要ありません。セッションを開始しない、つまりセッションCookieを送信しないことで、明らかにそれを必要としません。 まれなサイトをこのような状態にすることはできません。つまり、nginxを使用すると、最小限の労力と時間でほとんどのサイトをトラフィックの急増から保護できます。



必要な場合にのみセッションを開始するようサイトに教えます。



PHPで広く普及しているサイトでは、php.iniでsession.auto_startをゼロに設定するか、Apache仮想ホスト設定で設定することにより、これを行うことができます。 また、セッションCookieに適切な名前を設定する必要があります。



php_admin_value session.name "session" php_admin_value session.auto_start 0
      
      





サイト自体がコードでセッションを開始する場合、 session_start()は次のように置き換える必要があります。



 if (!empty($_COOKIE[session_name()]) || $_SERVER['REQUEST_METHOD'] == 'POST') { session_id() || session_start(); }
      
      





したがって、セッションは次の場合にのみ開始されます これが必要なものです。



セッションCookieなしでリクエストをキャッシュするようにnginxを構成する



サイトがサイトの訪問者にセッションCookieを送信しないことを確認した後、セッションCookieなしでリクエストキャッシュを保存するようにnginxを構成します。



サーバーブロックの前のnginx仮想ホストの構成など、便利な場所に次の行を追加します。



 proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=cache:30m max_size=1G; proxy_temp_path /var/lib/nginx/proxy 1 2; proxy_ignore_headers Expires Cache-Control; proxy_cache_use_stale error timeout invalid_header http_502; proxy_cache_bypass $cookie_session; proxy_no_cache $cookie_session;
      
      





適切なディレクトリを作成することを忘れないでください:



 mkdir -p /var/lib/nginx/cache chown -R www-data /var/lib/nginx/cache chmod 700 /var/lib/nginx/cache
      
      





対応するロケーションブロックで、強調表示された3行を追加します。



 location / { .... proxy_cache cache; proxy_cache_valid 10m; proxy_cache_valid 404 1m; .... proxy_pass http://backend; }
      
      





nginxを再起動し、ブラウザからCookieを削除して、サイトの速度を楽しみます。



キャッシングの微調整



特定のページのみをキャッシュする場合、または10分以上にわたって一部のアドレスをキャッシュする場合は、次を使用してキャッシュ時間を明示的に設定します。



 header("X-Accel-Expires: $seconds");
      
      





カウンターなどのキャッシュを完全に無効にするには、次を使用します。



 header("X-Accel-Expires: 0");
      
      







強度試験



ウェブサイトのホームページで100ストリームの強度を確認します。



 ab -n 1000 -c 100 http://www.example.com/
      
      





キャッシングを使用して、テストサイトは100を超えるrpを簡単に生成しました。これは理解できます。

キャッシュなし-予測どおり、リクエストの約70%で503エラーが表示されました。



キャッシュの更新を強制する



proxy_cache_bypassディレクティブが次のように変更された場合:



 proxy_cache_bypass $cookie_session $http_x_update;
      
      





必要に応じて、ページキャッシュを強制的に更新できます。



 curl -s -o /dev/null -H "X-Update: 1" www.example.com
      
      





タイトルは、あなただけが知っている他のタイトルに置き換える方が良いです。



All Articles