PHP-FPM: PHP সাইট
VDS-এ PHP-FPM ইনস্টল করা, Nginx-এর সাথে ইন্টিগ্রেট করা, আপনার টিয়ারের মেমোরি অনুযায়ী প্রসেস সংখ্যা নির্বাচন, এবং 502 ও 504 এরর সমাধান।
আপডেট: ২৩ আগস্ট, ২০২৬
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 ওয়ার্কার প্রসেস ৪০–১২০ MB খায়। ডেটাবেস এবং সিস্টেমের জন্য মেমরি রেখে টিয়ার অনুযায়ী এটি নির্ধারণ করুন। এটি /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 সংখ্যক অনুরোধের পর একটি প্রসেস রিস্টার্ট করে, তাই কোডে থাকা মেমরি লিক সপ্তাহের শেষ পর্যন্ত জমতে পারে না।
FPM-এর জন্য দরকারি php.ini মান: memory_limit = 256M, upload_max_filesize = 64M, post_max_size = 64M, opcache.enable = 1।
পরিবর্তন করার পর: systemctl reload php8.3-fpm।
সাধারণ ত্রুটি
| লক্ষণ | কারণ | কী করবেন |
|---|---|---|
502 Bad Gateway | ভুল সকেট পাথ অথবা সার্ভিসটি চলছে না | /run/php/-এ থাকা আসল ফাইলের সাথে fastcgi_pass মিলিয়ে দেখুন |
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।
সাইটের ডেটাবেস একটি আলাদা ইউজারের অধীনে তৈরি করুন, যার শুধু নিজের স্কিমার উপর অধিকার থাকবে — ইউজার এবং গ্রান্ট। CMS কনফিগে
rootঅ্যাকাউন্ট ব্যবহার করা একসাথে আপনার সব ডেটাবেস হারানোর সরাসরি পথ।