هذا المقال هو الجزء الثالث من مشروع شرح تثبيت خادم Nginx وتشغيل موقع عليه. للعودة إلى الفهرس، يمكن الضغط هنا.
هذا المقال يشرح طريقة تثبيت PHP متوافق مع Nginx مع اضافة ملفات ضبط خاصة بالمستخدمين من أجل فصل المواقع وحمايتها من الاختراق في حال وصل المخترق لأحد المواقع. في هذا الشرح لن يتم شرح طريقة تشغيل موقع PHP وسيتم تأجيل الشرح لجزء اخر من المقال حيث سيكون أسهل للفهم وأفضل في التطبيق.
تثبيت php
تثبيت php كما هو الحال مع باقي أجزاء الخادم هو أمر سهل وبسيط ولكن تثبيت php فقط ليس كافي لتشغيل أي موقع على الخادم، بالتالي في هذا القسم سيتم تثبيت php مع معظم الإضافات التي نحتاجها بشكل شبه اجباري من أجل تشغيل المواقع المتوفرة لنا اليوم مثل اضافة التعامل مع قواعد البيانات واضافات اخرى ضرورية لعمل الموقع.
لتثبيت php نقوم بتنفيذ الأمر التالي في طرفية الخادم:
apt install php-fpm php-mysql php-gd php-cli php-curl php-mbstring php-zip php-opcache php-xml php-dom php-exif php-fileinfo php-igbinary php-intl php-mbstring php-apcu php-iconv
عند الإنتهاء، نتأكد من تثبيت php من خلال الأمر التالي:
systemctl status php8.2-fpm.service
النتيجة يجب ان تكون مشابهة للتالي:
والآن نقوم بتفعيل تشغيل php مع بدء تشغيل النظام من خلال الأمر التالي:
systemctl enable php8.2-fpm.service
عمل ملف اعدادات خاص لكل موقع
بشكل عام، يمكن تشغيل جميع المواقع على الخادم باستخدام ملف اعدادات واحد وباستخدام مستخدم واحد. لكن، ولأسباب أمنية نقوم بالتفريق بين المواقع من خلال انشاء مستخدم لكل موقع وعمل ملف اعدادات لكل موقع. بهذا الشكل، نقوم بفصل صلاحيات كل موقع عن باقي المواقع وبالتالي في حال اُخترق موقع ما لن ينتقل الإختراق لباقي المواقع على الخادم. هذا أيضا يمنع وصول كل موقع لملفات المواقع الاخرى على الخادم.
ضبط ملف الاعدادات يتطلب منا عدد من الخطوات كالتالي:
إنشاء مستخدم جديد
يمكن انشاء مستخدم جديد من خلال الأمر التالي:
adduser username --home /home/username/
الأمر الأساسي هو adduser
يجب استبدال username باسم المستخدم الذي نرغب في إنشاءه
أما /home/username فهو مسار انشاء مجلد الملفات. بشكل عام بُفضّل ان يكون في مجلد home ولكن يمكن تغييره.
بعد تنفيذ الأمر، يجب ضبط صلاحيات الوصول إلى مجلد المستخدم من خلال الأمر التالي:
chown 755 /home/username/
يمكن الآن أيضا عمل مجلد لوضع ملفات الموقع فيه ومجلد لوضع السجلات فيه:
mkdir /home/username/public_html
mkdir /home/username/logs
chown -R username:username /home/username/
إنشاء ملف الإعدادات
ملفات الإعدادات متواجدة في المسار التالي:
/etc/php/8.2/fpm/pool.d
يمكن إنشاء ملف جديد من خلال الأمر التالي:
vi username.conf
يمكن تغيير vi واستخدام nano أو أي محرر ملفات اخر.
بعد ذلك يمكن لصق التالي في الملف:
[username]
user = username
group = username
listen = /run/php/php8.2-username.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.process_idle_timeout = 10s;
pm.max_requests = 500
slowlog = /home/username/logs/slow.log
request_slowlog_timeout = 30
request_slowlog_trace_depth = 20
request_terminate_timeout = 300
catch_workers_output = yes
security.limit_extensions = .php
php_flag[display_errors] = off
php_admin_value[error_log] = /home/username/logs/error.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 512M
في هذا الملف، يجب تغيير username باسم المستخدم الخاص بك.
المتغير pm.max_children هو العدد الأقصى لعمليات php التي يمكن تشغيلها من قبل المستخدم.
المتغير pm.start_servers هو العدد الأقل لعمليات php التي سيتم تشغيلها بشكل تلقائي.
المتغير pm.min_spare_servers هو عدد العمليات الأقل التي سيتم فتحها تحسبا.
المتغير pm.max_spare_servers هو قصى عدد للعمليات التي سيتم فتحها تحسبا.
المتغير pm.process_idle_timeout هو عدد الثواني قبل أن يتم قتل العملية الخاملة.
المتغير pm.max_requests هو عدد الطلبات التي ستقوم كل عملية بالتعامل معها قبل فتح عملية جديدة.
المتغير slowlog هو لتفعيل أو تعطيل عمل سجل بالعمليات البطئية. هذا مفيد لفهم سبب بطئ الموقع.
المتغير request_slowlog_timeout هو عدد الثواني الذي بعده سيتم اعتبار العملية بطيئة ومن ثم تسجيلها في السجل.
المتغير request_slowlog_trace_depth هو عمق العملية التي سيتم تسجيلها في سجل العمليات البطئية.
المتغير request_terminate_timeout هو وقت قتل العملية في حال لم تنتهي خلال مدة محددة. هنا حددناها بـ 300 ثانية وهو 5 دقائق.
المتغير catch_workers_output هو للسماح بتسجيل مخرجات عمليات php و تسجيلها في السجل بدلا من حذفها.
المتغير security.limit_extensions هو الصيغة التي سيتم تشغيلها على أساس انها ملف php.
المتغير php_flag[display_errors] هو لتفعيل أو أيقاف عرض أخطاء الكود على الشاشة مباشرة.
المتغير php_admin_value[error_log] هو لضبط مسار سجل الأخطاء.
المتغير php_admin_flag[log_errors] هو لتفعيل أو إيقاف تسجيل الأخطاء.
المتغير php_admin_value[memory_limit] هو حجم الذاكرة المسموح استخدامها في تنفيذ عمليات php.
بعد إتمام العمل على هذا الملف وحفظ التغييرات، يمكن اعادة تشغيل خدمة php من خلال الأمر التالي من أجل تحميل الملف الجديد:
systemctl restart php8.2-fpm.service
وبعدها نُنفذ الأمر التالي من أجل التأكد من أن الأمور على ما يرام:
systemctl status php8.2-fpm.service
النتيجة يجب أن تكون مشابهة للتالي:
بهذا نكون قد إنتهينا من ضبط إعدادات php من أجل مستخدم واحد. لعمل أكثر من مستخدم، يمكن تكرار الشرح أكثر من مرة.