بنية خوادم الويب في Plesk: Nginx كبروكسي عكسي أمام Apache
في بيئات الاستضافة التقليدية، كان يُستخدم خادم Apache منفرداً. ورغم قوته ومرونته بفضل ملفات .htaccess، إلا أنه يستهلك كمية هائلة من الذاكرة العشوائية (RAM) عند التعامل مع الزيارات العالية، لأنه يفتح (Process) جديد لكل زائر. من هنا، أدخل Plesk نظاماً معمارياً مزدوجاً يعتمد على Nginx كبروكسي عكسي (Reverse Proxy) أمام Apache.
كيف يعمل هذا المزيج؟ (Under the Hood)
عندما يطلب زائر صورة، أو ملف CSS، أو صفحة PHP من موقعك، يصل الطلب أولاً إلى Nginx الذي يستمع للمنفذ 80 و 443.
- الملفات الثابتة (Static Files): إذا كان الطلب لصورة أو ستايل، يقوم Nginx بخدمتها وإرسالها للزائر فوراً من الذاكرة (Caching) دون إزعاج Apache إطلاقاً! هذا يسرع الموقع بنسبة 300% ويوفر معالج السيرفر.
- الملفات الديناميكية (PHP): إذا كان الطلب لصفحة PHP، يدرك Nginx أنه لا يستطيع معالجتها، فيمرر الطلب (Proxy Pass) داخلياً إلى Apache (أو مباشرة إلى PHP-FPM)، والذي يقوم بدوره بمعالجة الكود وإرجاع النتيجة لـ Nginx ليرسلها للزائر.
الاستغناء عن Apache تماماً: (FPM application served by nginx)
لتحقيق الأداء الأقصى (Ultimate Performance) للمواقع الحديثة مثل Laravel أو WordPress، يمكنك الاستغناء عن Apache تماماً.
في لوحة Plesk، اذهب إلى Apache & nginx Settings وقم بإلغاء تحديد خيار (Proxy mode).
عندما تفعل ذلك، سيقوم Nginx بالتحدث مباشرة مع محرك PHP-FPM.
تحذير خطير للمحترفين: عند إيقاف Apache، ستتوقف جميع ملفات .htaccess عن العمل فوراً! أي قواعد إعادة توجيه (Rewrite Rules) كتبتها هناك يجب تحويلها إلى قواعد Nginx وكتابتها في صندوق (Additional nginx directives) في Plesk.
كتابة توجيهات Nginx المخصصة (Custom Directives)
إذا قمت بإيقاف Apache لتطبيق Laravel، سيحتاج مسار التوجيه للعمل بشكل مختلف لكي لا يعطيك خطأ 404 في كل الصفحات الفرعية.
في قسم Additional nginx directives أضف القاعدة الذهبية لـ Laravel:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# لتفعيل ضغط GZIP الاحترافي
gzip on;
gzip_disable "msie6";
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
بهذا أنت تمنح موقعك سرعة خرافية لا يمكن لـ Apache الوصول إليها.
تشغيل تطبيقات Node.js باستخدام Phusion Passenger
ماذا لو كان مشروعك مبنياً بـ React Server-side أو Express.js؟ Plesk يدعم Node.js أصلياً عبر إضافة مدمجة. يقوم Plesk بتهيئة Phusion Passenger، وهو تطبيق وسيط يقوم بتشغيل كود الـ Node.js في الخلفية ويربطه بـ Nginx.
لنجاح ذلك، تأكد من وضع ملف التشغيل الأساسي (مثل app.js أو server.js) في جذر المشروع، وأخبر Plesk باسم الملف من واجهة (Node.js Extension). سيقوم Plesk تلقائياً بتكوين البروكسي الداخلي ليتمكن الزوار من تصفح موقعك على المنفذ 80 بدلاً من الحاجة لكتابة domain.com:3000.
[توسعة المحترفين] أسرار Nginx المخفية و Micro-Caching للتطبيقات السريعة
توقفنا في الجزء السابق عند الاستغناء عن Apache. الآن سنتعمق في تقنيات سحرية باستخدام Nginx لا يعرفها إلا مهندسو الأداء العالي.
تقنية الـ Micro-Caching للتعامل مع الـ Viral Traffic
ماذا لو نشرت مقالاً في مدونتك وانتشر كالنار في الهشيم (Viral) وجلب لك 10 آلاف زائر في دقيقة واحدة؟ PHP وقاعدة البيانات سينهاران فوراً (502 Bad Gateway). الحل السحري لإنقاذ السيرفر هو Micro-Caching (التخزين المؤقت الدقيق). الفكرة هي أن نطلب من Nginx أن يحفظ نتيجة صفحة الـ PHP في الذاكرة لمدة ثانية واحدة فقط!
خلال هذه الثانية الواحدة، إذا جاء 100 زائر، الزائر الأول فقط هو من سيستهلك موارد PHP، بينما الـ 99 الآخرين سيحصلون على الصفحة المخبأة (Cached) من Nginx فوراً. هذا يعني أن سيرفرك سيعالج 1 طلب فقط في الثانية لـ PHP، بدلاً من 100! لتنفيذ ذلك، قم بإضافة هذه التوجيهات في صندوق Nginx في Plesk:
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=MICRO:10m inactive=5m max_size=1g;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
# داخل location /
fastcgi_cache MICRO;
fastcgi_cache_valid 200 1s;
fastcgi_cache_use_stale updating error timeout invalid_header http_500;
بهذا الإعداد البسيط، سيرفرك بقوة 2GB رام يمكنه الصمود أمام 100 ألف زائر في الدقيقة دون أن يتعرق!
منع الـ Hotlinking لسرقة الباندويث
العديد من المنتديات أو المواقع المنافسة قد تقوم بنسخ رابط الصورة من موقعك (Copy Image Address) ولصقها في مواقعهم. هذا يعني أن زوار مواقعهم سيقومون باستهلاك البيانات (Bandwidth) الخاص بسيرفرك أنت مع كل مشاهدة! لحماية ملفاتك في Plesk، أضف الكود التالي في إعدادات Nginx الإضافية:
location ~ \.(jpe?g|png|gif|webp)$ {
valid_referers none blocked server_names *.yourdomain.com;
if ($invalid_referer) {
return 403;
}
}
إذا حاول موقع غريب عرض صورتك، سيقوم Nginx بكسر الصورة وإظهار خطأ 403 فوراً.
التحكم في معدل الطلبات (Rate Limiting) لحماية الـ APIs
إذا كان لديك واجهة برمجية (API)، قد تتعرض لهجمات DDoS بسيطة أو استهلاك مجنون من قبل البوتات. Nginx يمكنه فرض قيود صارمة.
أضف توجيه الـ limit_req_zone في قسم הـ http (تحتاج لتدخل عبر הـ CLI أو إضافة Custom Configuration)، وحدد الطلبات بـ 5 طلبات في الثانية لكل عنوان IP (Rate Limit = 5r/s). أي طلب إضافي سيتم طرده بخطأ 429 Too Many Requests، مما يحمي قاعدة بياناتك من الانهيار.
💬 التعليقات
0 تعليقات