کشینگ و رفع اشکال NGINX با Reverse Proxy در cPanel & WHM

این مقاله نحوه عملکرد کشینگ در NGINX با Reverse Proxy را توضیح می‌دهد. شامل محل ذخیره کش، کنترل هدرهای کش، کلیدهای کش سفارشی، مدیریت کش با htaccess، تشخیص وضعیت کش برای ابزارهای شخص ثالث، و همچنین رفع اشکالات رایج مانند خطای proxy_headers_hash و مشکلات ری‌استارت NGINX است.

NGINX cachingreverse proxy troubleshootingcPanel NGINX cache

~3 دقیقه مطالعه • بروزرسانی ۳ اسفند ۱۴۰۴

1. مقدمه


این مستند نحوه عملکرد کشینگ در NGINX® با Reverse Proxy و همچنین روش‌های رفع اشکال رایج را توضیح می‌دهد.




2. کشینگ در NGINX با Reverse Proxy


NGINX به‌صورت پیش‌فرض تمام درخواست‌ها را کش می‌کند و آن‌ها را به Apache پروکسی می‌کند. کش برای هر کاربر به‌صورت جداگانه ذخیره می‌شود.


مسیر ذخیره کش (type = نوع کش، username = نام کاربر):

/var/cache/ea-nginx/proxy/username

NGINX از نوع کش proxy برای دستور proxy_pass استفاده می‌کند. پوشه‌های کش دارای سطح دسترسی 700 هستند و فقط کاربران nobody و root به آن دسترسی دارند.


درخواست‌های داینامیک باید هدرهای کنترل کش مناسب ارسال کنند. در غیر این صورت، ممکن است پاسخ‌های کش‌شده اشتباه به کاربران نمایش داده شود.


برای رفع مشکل:

  • کش را برای کاربر از طریق WHM » NGINX Manager غیرفعال کنید.
  • برنامه خود را طوری تنظیم کنید که هدرهای مناسب ارسال کند.



3. کلیدهای کش سفارشی


می‌توانید کش را بر اساس شرایط مختلف جدا کنید (مثلاً موبایل و دسکتاپ).


برای این کار مقدار $CACHE_KEY_PREFIX را در فایل زیر تنظیم کنید:

/etc/nginx/conf.d/includes-optional/set-CACHE_KEY_PREFIX.conf

این فایل به‌صورت پیش‌فرض شامل نمونه‌ای برای کش جداگانه موبایل است (کامنت شده).




4. مدیریت کش با htaccess


می‌توانید از فایل .htaccess برای کنترل کش استفاده کنید، مخصوصاً زمانی که برنامه شما هدرهای مناسب ارسال نمی‌کند.


نمونه برای جلوگیری از کش روی مسیرهای حساس:

# برنامه هدرهای مناسب ارسال نمی‌کند و داده خصوصی دارد.

    
        Header set Pragma "no-cache"
        Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
        Header set Expires "Thu, 1 Jan 1970 00:00:00 GMT"
    


مهم: اگر برنامه شما برای داده‌های حساس هدر مناسب ارسال نکند، یک ریسک امنیتی است.


برای فعال‌سازی کش روی فایل‌های استاتیک:


Header set Cache-Control "max-age=3600, public"




5. تشخیص وضعیت کش برای ابزارهای شخص ثالث


ابزارهای شخص ثالث می‌توانند وضعیت کش را با بررسی فایل‌های زیر تشخیص دهند:

اگر فایل زیر وجود نداشته باشد، NGINX نصب نیست:

/etc/nginx/ea-nginx/cache.json

اگر کلید enabled در فایل‌های زیر وجود داشته باشد، مقدار آن وضعیت کش را تعیین می‌کند:

سطح کاربر:

/var/cpanel/userdata/user/nginx-cache.json

سطح global:

/etc/nginx/ea-nginx/cache.json

اگر هیچ‌کدام کلید enabled نداشته باشند، کش به‌صورت پیش‌فرض فعال است.




6. رفع اشکال NGINX


6.1 خطای “Could not build proxy_headers hash”


اگر خطایی مشابه زیر دریافت کردید:

nginx: [emerg] could not build proxy_headers_hash, you should increase proxy_headers_hash_bucket_size

این خطا زمانی رخ می‌دهد که یک proxy_set_header با نام هدر بسیار طولانی وجود داشته باشد.


راه‌حل: دستور زیر را دقیقاً قبل از آن هدر اضافه کنید:

proxy_headers_hash_bucket_size number;



6.2 NGINX ری‌استارت نمی‌شود


اگر NGINX را با دستور nginx اجرا کرده باشید، دستورات معمولی ری‌استارت کار نخواهند کرد.


راه‌حل:

  1. سرویس را متوقف کنید:
/usr/sbin/nginx -s stop

  1. سپس با یکی از دستورات زیر NGINX را اجرا کنید:
/usr/local/cpanel/scripts/restartsrv_nginx start
systemctl start nginx.service
/etc/init.d/nginx start



نتیجه‌گیری


کشینگ NGINX با Reverse Proxy عملکرد بسیار قدرتمندی ارائه می‌دهد، اما نیازمند هدرهای صحیح و پیکربندی دقیق است. با استفاده از کلیدهای کش سفارشی، مدیریت کش با htaccess و روش‌های رفع اشکال، می‌توانید یک محیط سریع، امن و پایدار ایجاد کنید.


نوشته و پژوهش شده توسط دکتر شاهین صیامی