كيف الحال ,

من أشهر كتبت موضوع عن مدى كرهي الشديد لثقيل الدم Apache , و عرضت عليكم Nginx كبديل متفوق , مع هذا Nginx ليس كل شيء في السيرفر , هناك ملحقات اساسية لتشغيل أي موقع وهي PHP و MySQL .

المهم أي شخص عنده خبرة بسيطة في لغات البرمجة الاخرى , يعرف ان PHP ادائها من ناحية سرعة التنفيد ليس مثال , ان لم نقل انها بطيئة مقارن بالغات المترجمة مثل ++C و ASP.net , و أي شخص عنده موقع مزدحم بالزوار يدرك هذا الشي .

وردبريس على سبيل المثال تحوي على اضافات للكاش ( غالبيتهم بهم مشاكل عدة ) , و لن يعطوك الاداء الذي ممكن ان تصل بيه عبر تفعل الكاش مباشرة على nginx .

قبل كتابة الاكواد , اود التوضيح ان اغلب الشروحات في الانترنت تغفل جانب مهم عند تفعيل الكاش و هي الاختلاف بين نسخة الجوال Mobile الموبايل و نسخة سطح المكتب Desktop ,هذا الجانب تمت تغطيته هنا .

ضيف هذا الكود تحت بلوك http { بملف nginx.conf تجده بالمسار /etc/nginx/nginx.conf

map $http_user_agent $mobile_request {
     default                  fullversion;
     "~*ipad"    mobileversion;
     "~*android.*mobile"   mobileversion;
     "~*iphone"    mobileversion;
     "~*ipod.*mobile"   mobileversion;
     "~*BlackBerry*Mobile Safari"  mobileversion;
     "~*BB*Mobile Safari"   mobileversion;
     "~*Opera.*Mini/7"   mobileversion;
     "~*IEMobile/10.*Touch"   mobileversion;
     "~*IEMobile/11.*Touch"   mobileversion;
     "~*IEMobile/7.0"   mobileversion;
     "~*IEMobile/9.0"   mobileversion;
     "~*Firefox.*Mobile"   mobileversion;
     "~*webOS"    mobileversion;
     "~*android|ip(hone|od)|windows\s+(?:ce|phone)" mobileversion;
     "~*symbian|sonyericsson|samsung|lg|blackberry" mobileversion;
     "~*mobile" mobileversion;
}
fastcgi_cache_path      /var/www/cache/example          levels=1:2 keys_zone=microcache:90m max_size=60m inactive=1h; 
fastcgi_cache_key     $scheme$request_method$host$request_uri$mobile_request;

يجب ان تكوم بانشاء المسار /var/www/cache/example ليخزن به إنجين إكس ملفات الكاش المؤقتة

اكتب هذه الاكواد داخل البوك الخاص بموقعك تحت server {

set $no_cache 0; 
if ($request_method != GET){    set $no_cache 1;} 
if ($query_string != ""){   set $no_cache 1;} 
if ($request_uri ~* "/(wp-login.php|wp-admin|login.php|backend|admin)")  {set $no_cache 1; }   
if ($http_cookie ~* "PHPSESSID")  {    set $no_cache 1;} 
if ($http_cookie ~* "wordpress_logged_in_") {    set $no_cache 1 ; } 

الجزء المهم هنا هو تفعيل الكاش على كل طلبات php-fpm من خلال البلوك الخاص ب php ضيف المعاملات الخاصة بالكاش فقط ابقي على اي معاملات خاصة بك

location ~ \.php$ {
  root   /var/www/example;

add_header X-Cache     $upstream_cache_status;
  fastcgi_cache_bypass $no_cache;
  fastcgi_no_cache     $no_cache;
  fastcgi_cache_key    $scheme$request_method$host$request_uri$mobile_request;
  fastcgi_cache microcache;
  fastcgi_cache_valid 200 301 302 30s;
  fastcgi_cache_use_stale updating error timeout invalid_header http_500;


  fastcgi_split_path_info ^(.+\.php)(/.+)$;
  fastcgi_pass unix:/run/php/php7.4-fpm.sock;
  fastcgi_index index.php;
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $request_filename;
add_header X-UA-Detect $mobile_request;
           }

عدل php7.4-fpm باصدار ال php الخاص بك مثلا php5.6-fpm إلخ

أخيرا و للحصول على سرعة اكبر سنقوم بتحميل مجلد الكاش على الرام مباشرة ,

mount   -t   tmpfs   -o   size=100M,mode=0755   tmpfs   /var/www/cache

حتى يتفعل مجلد الكاش مع كل اعادة تشغيل للسيرف ضيف هذه الاسطر لملف /etc/fstab

 nano -w /etc/fstab
 tmpfs /var/www/cache tmpfs defaults,size=100M 0 0

لاي استفسار انا جاهز .