fastcgi_no_cache در Nginx

nginx fastcgi no cache
15 فروردین 1404

مقدمه‌ای بر fastcgi_no_cache در Nginx


تو این روزا یکی از امکانات بسیار خوب وب‌سرور nginx، ماژول ngx_http_fastcgi_module هستش که توی پردازش درخواست‌های FastCGI به ما کمک می‌کنه. یکی از تنظیمات مهم این ماژول، fastcgi_no_cache هستش. با استفاده از این گزینه می‌تونین تعیین کنین که آیا نتایج درخواست‌های FastCGI باید در کش ذخیره بشن یا نه.


شاید بپرسین چرا باید از کش استفاده کنیم؟ خوب، سرعت وب‌سایت خیلی وابسته به زمان پاسخ به درخواست‌هاست و استفاده از کش می‌تونه این زمان رو به طرز چشم‌گیری کاهش بده. اما همیشه کش کردن نتایج درست نیست، به خصوص وقتی که محتویات داینامیک داشته باشیم که ممکنه برا هر کاربر متفاوت باشه.


به عنوان مثال، فرض کنین که یک وب‌سایت خبری دارید که هر دقیقه بروزرسانی میشه. اگر کش کردن محتوای صفحات رو فعال کنین، ممکنه کاربرانی که می‌خواستن جدیدترین اخبار رو ببینن، اطلاعات قدیمی‌تری رو پیدا کنن. اینجاست که fastcgi_no_cache به کار میاد و به شما این امکان رو می‌ده که فقط در شرایط خاصی اجازه کش کردن نتایج رو بدین.


حالا بیایید یک نگاه دقیق‌تر به چگونگی استفاده از fastcgi_no_cache بندازیم و بیاموزیم که چطور می‌تونیم این قابلیت رو داخل پیکربندی Nginx پیاده‌سازی کنیم.


نحوه استفاده از fastcgi_no_cache


location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_no_cache $arg_nocache; // اینجا مشخص کردیم که کش نکنه
fastcgi_cache_bypass $arg_nocache; // اجازه میده که کش بایپس بشه
}

توضیح خط به خط کد



location ~ \.php$
این خط مشخص می‌کنه که تمامی فایل‌های PHP باید زیر نظر این بلاک قرار بگیرند.

include fastcgi_params;
پارامترهای FastCGI رو وارد می‌کنیم تا Nginx بتونه با FastCGI ارتباط برقرار کنه.

fastcgi_pass 127.0.0.1:9000;
به سرور FastCGI اشاره می‌کنیم که در اینجا روی localhost و پورت 9000 قرار داره.

fastcgi_index index.php;
فایل پیش‌فرض رو به index.php تعیین کردیم.

fastcgi_no_cache $arg_nocache;
مقدار متغیر $arg_nocache رو بررسی می‌کنیم تا تصمیم بگیریم که آیا باید کش بشه یا نه.

fastcgi_cache_bypass $arg_nocache;
اجازه می‌ده که اگر کاربر این متغیر رو ارسال کرده باشه، کش بایپس بشه و داده‌های جدید بدون کش باید برگردانده بشن.

سوالات متداول

؟

fastcgi_no_cache دقیقا چه کاری می‌کند؟

؟

چطور می‌تونم کش FastCGI رو برای یک صفحه خاص غیرفعال کنم؟

؟

آیا fastcgi_cache_bypass و fastcgi_no_cache فرق دارند؟