PHP-FPM: مواقع PHP
تثبيت PHP-FPM على VDS، ودمجه مع Nginx، واختيار عدد العمليات حسب ذاكرة مستواك، ومعالجة أخطاء 502 و504.
آخر تحديث 23 أغسطس 2026
PHP-FPM خدمة منفصلة تنفّذ شيفرة PHP؛ وخادم الويب يمرّر الطلبات إليها فقط. وهكذا يعمل WordPress وLaravel وBitrix وكل ما يعتمد على PHP تقريبًا.
التثبيت
apt update
apt install -y php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip
systemctl enable --now php8.3-fpm
على AlmaLinux وCentOS Stream، استخدم dnf install -y php-fpm php-mysqlnd ...؛ واسم الخدمة هو php-fpm. للتحقق من الإصدار الدقيق، نفّذ:
php -v
systemctl list-units | grep fpm
الربط مع Nginx
server {
listen 80;
server_name example.ru;
root /var/www/example.ru/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.(?!well-known) { deny all; }
}
nginx -t && systemctl reload nginx
echo '<?php phpinfo();' > /var/www/example.ru/public/info.php
افتح /info.php، وتأكد من عمل PHP، ثم احذف الملف فورًا: فهو يكشف الإصدار والمسارات وقائمة الوحدات.
كم عملية يُستحسن الإبقاء عليها
تستهلك كل عملية عامل PHP ما بين 40 و120 ميغابايت. حدّد العدد بحسب المستوى، مع ترك ذاكرة لقاعدة البيانات والنظام. يُضبط ذلك في /etc/php/8.3/fpm/pool.d/www.conf:
| المستوى | الذاكرة | pm.max_children المناسب |
|---|---|---|
| VDS-1 | 2 GB | 5 |
| VDS-2 | 4 GB | 10 |
| VDS-3 | 8 GB | 20 |
| VDS-5 | 24 GB | 60 |
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 500
يعيد pm.max_requests تشغيل العملية بعد N من الطلبات، حتى لا تتراكم تسريبات الذاكرة في الشيفرة حتى نهاية الأسبوع.
قيم php.ini المفيدة لـ FPM: memory_limit = 256M، وupload_max_filesize = 64M، وpost_max_size = 64M، وopcache.enable = 1.
بعد إجراء التغييرات: systemctl reload php8.3-fpm.
الأخطاء الشائعة
| العَرَض | السبب | ما العمل |
|---|---|---|
502 Bad Gateway | مسار socket خاطئ أو الخدمة لا تعمل | تحقق من fastcgi_pass مقابل الملف الفعلي في /run/php/ |
504 Gateway Time-out | يستغرق السكربت وقتًا أطول من المهلة | ارفع fastcgi_read_timeout وmax_execution_time |
| المتصفح ينزّل الملف بدل تنفيذه | كتلة location ~ \.php$ لم تتطابق | تحقق من ترتيب كتل location ونفّذ nginx -t |
server reached pm.max_children في السجل | عدد العمليات غير كافٍ | ارفع الحد إن سمحت الذاكرة، وإلا فانتقل إلى مستوى أعلى |
السجلات: /var/log/php8.3-fpm.log و/var/log/nginx/error.log.
أنشئ قاعدة بيانات الموقع تحت مستخدم منفصل يملك صلاحيات على مخططه فقط — المستخدمون والصلاحيات. استخدام حساب
rootفي إعدادات نظام إدارة المحتوى طريق مباشر إلى فقدان كل قواعد بياناتك دفعة واحدة.