دليل إعداد PHP-FPM مع Nginx على Ubuntu خطوة بخطوة

أبرز النقاط
- Nginx لا يملك وحدة PHP مدمجة، لذا يعتمد على PHP-FPM عبر بروتوكول FastCGI
- إنشاء pool منفصل لكل موقع يعزز الأمان والعزل بين التطبيقات
- استخدام Unix Socket أسرع من TCP لأنه يتجاوز طبقة الشبكة
يُعدّ الجمع بين PHP-FPM مع Nginx الطريقة المعيارية لتشغيل تطبيقات PHP على خوادم Nginx، إذ لا يمتلك Nginx وحدة PHP مدمجة كما هو الحال مع mod_php في Apache. بدلاً من ذلك، يتولى Nginx تقديم الملفات الثابتة ويُحيل طلبات .php إلى PHP-FPM عبر بروتوكول FastCGI، عادةً من خلال Unix Socket. في هذا الدليل العملي، ستتعلم تثبيت PHP-FPM على Ubuntu، وإنشاء pool مخصص، وربط Nginx به، واختبار البنية، ومعالجة أخطاء 502 الشائعة.
ما هو PHP-FPM ولماذا نحتاجه؟
PHP-FPM اختصار لـ FastCGI Process Manager، وهو واجهة SAPI تُدير مجموعة من عمليات العمل (worker processes). تعمل عملية رئيسية (master) على الاستماع عبر socket أو منفذ TCP، بينما تنفّذ عمليات العمل سكربتات PHP وتُعيد المخرجات إلى خادم الويب. هذا الفصل بين خادم الويب ومعالج PHP يمنح مرونة في التحكم بالموارد وتحسين الأداء.
ما إصدارات PHP المدعومة في كل إصدار من Ubuntu؟
تختلف إصدارات PHP الافتراضية حسب إصدار Ubuntu LTS الذي تستخدمه. من الضروري التحقق من الإصدار قبل تعديل المسارات أو أسماء الخدمات:
- Ubuntu 22.04 LTS (Jammy): PHP 8.1 — المسار: /etc/php/8.1/fpm/pool.d/
- Ubuntu 24.04 LTS (Noble Numbat): PHP 8.3 — المسار: /etc/php/8.3/fpm/pool.d/
- Ubuntu 26.04 LTS (Resolute Raccoon): PHP 8.5 — المسار: /etc/php/8.5/fpm/pool.d/
للتحقق من إصدار نظامك وPHP، نفّذ الأمرين: lsb_release -rs و php -v
كيف تُثبّت PHP-FPM على Ubuntu؟
ابدأ بتحديث قائمة الحزم ثم ثبّت حزمة FPM المناسبة لإصدارك. المثال التالي يستخدم Ubuntu 22.04 مع PHP 8.1:
sudo apt update && sudo apt install php8.1-fpm
على Ubuntu 24.04 و26.04، يمكنك تثبيت الحزمة الوصفية مباشرة: sudo apt install php-fpm، وسيُثبَّت الإصدار الافتراضي للتوزيعة.
بعد التثبيت، فعّل الخدمة وشغّلها:
sudo systemctl enable php8.1-fpm && sudo systemctl start php8.1-fpm
تحقق من حالة الخدمة بالأمر: sudo systemctl status php8.1-fpm — يجب أن ترى active (running). ثم تأكد من وجود الـ socket:
ls -l /run/php/php8.1-fpm.sock
كيف تُنشئ pool منفصل لموقعك؟
ملف الـ pool الافتراضي هو www.conf ويكفي لموقع واحد. لكن إذا كنت تستضيف عدة تطبيقات، فالأفضل إنشاء pool مستقل لكل موقع لتحقيق العزل الأمني والتحكم الدقيق بالموارد. المثال التالي يُنشئ pool باسم wordpress_site تحت مستخدم مخصص:
أولاً، أنشئ المستخدم والمجموعة:
sudo groupadd wordpress_user && sudo useradd -g wordpress_user -d /var/www/wordpress -s /usr/sbin/nologin wordpress_user
ثم أنشئ ملف الإعدادات:
sudo nano /etc/php/8.1/fpm/pool.d/wordpress_pool.conf
أضف المحتوى التالي مع الحفاظ على تناسق إصدار PHP في مسار الـ socket:
[wordpress_site]
user = wordpress_user
group = wordpress_user
listen = /run/php/php8.1-fpm-wordpress.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = dynamic
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 8
pm.max_requests = 500
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off
ما دلالة كل توجيه في إعدادات الـ pool؟
- pm = dynamic: يُنشئ عمليات حسب الطلب ضمن الحدود المحددة
- pm.max_children: الحد الأقصى لعمليات العمل المتزامنة
- pm.start_servers: عدد العمليات عند بدء التشغيل
- pm.min_spare_servers / pm.max_spare_servers: الحد الأدنى والأقصى للعمليات الخاملة
- pm.max_requests: عدد الطلبات قبل إعادة تدوير العملية لمنع تسرب الذاكرة
- disable_functions: تعطيل دوال shell الخطرة لتعزيز الأمان
بعد الحفظ، أعد تحميل الخدمة: sudo systemctl reload php8.1-fpm
كيف تربط Nginx بـ PHP-FPM؟
أنشئ أو عدّل ملف server block في /etc/nginx/sites-available/ وأشِر fastcgi_pass إلى socket الـ pool الذي أنشأته:
server {
listen 80;
server_name example.com;
root /var/www/wordpress;
index index.php index.html;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm-wordpress.sock;
}
}
فعّل الموقع وأعد تحميل Nginx:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ && sudo nginx -t && sudo systemctl reload nginx
Unix Socket أم TCP: أيهما تختار؟
Unix Socket أسرع لأنه يتجاوز طبقة الشبكة ويعمل داخل نواة النظام. استخدمه عندما يكون Nginx وPHP-FPM على نفس الخادم. أما TCP (مثل 127.0.0.1:9000) فمناسب عند فصل PHP-FPM على خادم مستقل أو داخل حاوية Docker.
كيف تُعالج خطأ 502 Bad Gateway؟
- تحقق أن خدمة PHP-FPM تعمل: sudo systemctl status php8.1-fpm
- تأكد أن مسار socket في Nginx يطابق المسار الفعلي: ls -l /run/php/
- راجع صلاحيات الـ socket: يجب أن يملكها www-data أو المستخدم الذي يعمل Nginx تحته
- افحص سجلات الأخطاء: sudo tail -f /var/log/nginx/error.log
ملاحظات خاصة بـ Ubuntu 24.04 و26.04
على Ubuntu 24.04، استبدل 8.1 بـ 8.3 في جميع الأوامر والمسارات. على Ubuntu 26.04، استبدله بـ 8.5. الأمر sudo apt install php-fpm يُثبّت الإصدار الافتراضي للتوزيعة تلقائياً.
رأي Logicity
إنشاء pool منفصل لكل تطبيق ليس ترفاً بل ضرورة أمنية، خاصة في بيئات الاستضافة المشتركة أو عند تشغيل عدة مواقع على خادم واحد. العزل يمنع اختراق موقع من التأثير على المواقع الأخرى. كذلك، ضبط pm.max_requests يحمي من تسرب الذاكرة في السكربتات طويلة العمر — نقطة كثيراً ما تُهمل في البيئات الإنتاجية.
الأسئلة الشائعة
هل يمكن تشغيل أكثر من إصدار PHP على نفس الخادم؟
نعم، يمكنك تثبيت عدة إصدارات من PHP-FPM وإنشاء pool لكل إصدار، ثم توجيه كل موقع إلى الـ socket المناسب في إعدادات Nginx.
ما الفرق بين pm = static وpm = dynamic؟
static يُبقي عدداً ثابتاً من العمليات دائماً، مناسب للخوادم ذات الحمل المتوقع. dynamic يُنشئ ويُنهي العمليات حسب الطلب، مناسب للموارد المحدودة أو الحمل المتغير.
كيف أختبر أن PHP-FPM يعمل مع Nginx؟
أنشئ ملف info.php يحتوي <?php phpinfo(); ?> في جذر الموقع، ثم افتحه في المتصفح. إذا ظهرت صفحة معلومات PHP، فالاتصال ناجح.
هل Unix Socket آمن؟
نعم، لأنه يعتمد على صلاحيات نظام الملفات. تأكد أن listen.owner وlisten.group يطابقان المستخدم الذي يعمل Nginx تحته.
هل تحتاج مساعدة في التطبيق؟
إذا واجهت صعوبة في إعداد بيئة PHP-FPM مع Nginx أو احتجت لمراجعة أمنية لإعداداتك، تواصل مع فريق Logicity للحصول على استشارة تقنية متخصصة.
فاطمة الزهراء
كاتبة تقنية متخصصة في الذكاء الاصطناعي
مقالات ذات صلة
تصفح الكلاقرأ أيضاً

مستثمرون صينيون اشتروا سراً حصصاً في SpaceX قبل الطرح العام
كشفت وثائق محكمة أمريكية أن مستثمرين صينيين وروس استحوذوا سراً على حصص في شركة SpaceX قبل سنوات من طرحها العام، وذلك عبر شركة وسيطة مقرها الولايات المتحدة، في وقت تبني فيه شركة إيلون ماسك أقماراً تجسس

5 إضافات مجانية في Obsidian تحوّل ملاحظاتك إلى خرائط بصرية
Obsidian ليس مجرد محرر نصوص بروابط خلفية. إنه مساحة للتفكير أكثر من كونه تطبيقاً لتدوين الملاحظات. أفكارك ومشاريعك غير المكتملة لا يجب أن تبقى حبيسة جدران من النصوص. ما يميز Obsidian عن غيره من تطبيقا

4 تطبيقات احذفها فوراً من Google TV لتسريع جهازك
اشتريت تلفزيون TCL أو Hisense جديداً بشاشة 75 بوصة، علّقته على الجدار بحماس، ثم اكتشفت عشرات التطبيقات المُثبّتة مسبقاً التي لن تفتحها في حياتك. هذه التطبيقات ليست مجرد إزعاج بصري؛ إنها تلتهم مساحة ال
