cache مناسب ترافیک را کم می‌کند؛ cache پاسخ شخصی می‌تواند داده را افشا کند. امشب فقط دارایی‌های ثابت را تنظیم می‌کنیم و نوع محتوا و رفتار gzip را می‌سنجیم.

این جلسه بخشی از دورهٔ انجین‌اکس در ۵۰ شب است. قرارداد آزمایشگاه، مسیرها و روال اعمال تغییر در راهنمای دوره آمده است.

محیط: www با MIME types اصلی، snippet هدر پایه و پوشهٔ assets.

دامنهٔ محدود#

یک فایل CSS زیر /var/www/nginx-lab/public/assets/lab.css بساز. در server:

gzip on;
gzip_vary on;
gzip_min_length 256;
gzip_types text/css application/javascript application/json;
location /assets/ {
    try_files $uri =404;
    expires 1h;
}

gzip_types برای نوع MIME است، نه پسوند فایل. برای مشاهدهٔ فشرده‌سازی، فایل آزمایشگاهی را از حد 256 بایت بزرگ‌تر بساز. expires اطلاعات cache تولید می‌کند و برخلاف add_header اختصاصی، نیاز به حذف مجموعهٔ هدر والد ندارد.

curl --cacert ~/nginx-lab/pki/ca.crt \
  --resolve www.nginx.test:443:192.168.57.10 \
  -H 'Accept-Encoding: gzip' -D - -o /dev/null https://www.nginx.test/assets/lab.css

باید Content-Encoding، Vary و سیاست cache مناسب ببینی؛ درخواست بدون Accept-Encoding هم قابل پاسخ باشد. تصویر فشردهٔ JPEG یا فایل zip را دوباره gzip کردن الزاماً سود ندارد.

تغییر محتوا#

فایل دارای hash در نام می‌تواند cache طولانی و immutable داشته باشد؛ lab.css بدون version چنین تضمینی ندارد. پاسخ ورود، حساب کاربر و API خصوصی را در این policy وارد نکن. فشرده‌سازی پاسخ دارای راز و دادهٔ بازتاب‌شده به تحلیل جدا نیاز دارد.

تمرین و بازگشت: CSS را تغییر بده و cache، درخواست شرطی و پاسخ تازه را در مرورگر ببین. cache policy سرور را بردار؛ cache قبلی مرورگر فوری حذف نمی‌شود. برای HTML پویا، مالک سیاست باید برنامه باشد؛ هدر no-store آن را کور overwrite نکن.

منبع: gzip ، expires .