Skip to content
VDS · ওয়েবসাইট ও ওয়েব সার্ভার

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-12 GB5
VDS-24 GB10
VDS-38 GB20
VDS-524 GB60
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 অ্যাকাউন্ট ব্যবহার করা একসাথে আপনার সব ডেটাবেস হারানোর সরাসরি পথ।