আজকের ডিজিটাল যুগে দ্রুত এবং নিরাপদ ওয়েবসাইট চাহিদার শীর্ষে। PHP দিয়ে বানানো WordPress, Laravel, অথবা কাস্টম ওয়েব অ্যাপ্লিকেশন চালাতে গেলে একসময় আমরা Apache server-এ traditional PHP module ব্যবহার করতাম। কিন্তু বড় ভিজিটর হ্যান্ডল করা, স্পিড ও সিকিউরিটি মেইনটেইন করা চ্যালেঞ্জিং হয়ে পড়ে।
এখানেই আসে PHP-FPM (PHP FastCGI Process Manager)।
PHP-FPM আপনার সার্ভারের PHP পারফরম্যান্স, লোড ম্যানেজমেন্ট ও সিকিউরিটি অনেকাংশে বাড়িয়ে দেয়।
PHP-FPM কী?
PHP-FPM হচ্ছে “PHP FastCGI Process Manager”-এর সংক্ষিপ্ত রূপ।
এটি PHP-এর জন্য একধরনের FastCGI implementation, যেটা high-performance ওয়েব সার্ভার যেমন Nginx, LiteSpeed, বা Apache-এর সাথে কাজ করে।
এর প্রধান কাজ হচ্ছে efficient ভাবে PHP script এক্সিকিউশন ম্যানেজ করা, যাতে সাইটে হাজারো ভিজিটরও সহজে হ্যান্ডল হয়, স্পিড কম না হয়, সার্ভার ক্রাশ না করে।
কেন PHP-FPM ব্যবহার করবেন?
১. Performance
- PHP-FPM traditional mod_php-এর তুলনায় অনেক বেশি efficient ও scalable।
- একাধিক worker process parallel ভাবে PHP request হ্যান্ডল করে।
- Memory usage ও CPU management smartly করে।
২. Security
- আলাদা আলাদা pool তৈরি করে আপনি সাইট/ইউজার-ভিত্তিক আলাদা permissions দিতে পারেন।
- Process isolation ফলে এক ইউজারের স্ক্রিপ্ট আরেকজনের স্ক্রিপ্টে access করতে পারে না।
- Worker process limit করলে DOS attack বা server overload থেকে রক্ষা পাওয়া যায়।
৩. Flexibility & Control
- pool-wise custom configuration করা যায় (memory, process limit, timeout ইত্যাদি)।
- Slowlog feature দিয়ে কোন কোন স্ক্রিপ্ট স্লো চলছে তা সহজেই ট্র্যাক করা যায়।
- Real-time process management ও error handling সহজ হয়।
কিভাবে PHP-FPM কাজ করে? (How PHP-FPM Works)
- Traditional Method: Apache mod_php সরাসরি PHP execute করত, ফলে server load বেড়ে যেত।
- PHP-FPM:
- PHP-FPM আলাদা process pool তৈরি করে।
- ওয়েব সার্ভার (Nginx বা Apache) request পাঠায় PHP-FPM-এ (FastCGI protocol দিয়ে)।
- PHP-FPM সেই request process করে output ফেরত পাঠায়।
- প্রতিটা pool-এর জন্য আলাদা config, user, resource limit define করা যায়।
PHP-FPM vs mod_php: পার্থক্য
বিষয় | PHP-FPM | mod_php |
---|---|---|
Performance | High (multi-process) | Average (shared process) |
Scalability | Easy (process pool) | Limited |
Security | Process Isolation | Shared context |
Server Support | Nginx, Apache, LiteSpeed | Mostly Apache |
Custom Config | Yes, per pool/user | Limited |
PHP-FPM ইন্সটল ও কনফিগারেশন (Installation & Configuration)
Step 1: PHP-FPM Install করুন
Ubuntu / Debian:
bashCopyEditsudo apt update
sudo apt install php-fpm
CentOS / RHEL:
bashCopyEditsudo yum install epel-release
sudo yum install php-fpm
Step 2: PHP-FPM সার্ভিস চালু ও Enable করুন
bashCopyEditsudo systemctl start php-fpm
sudo systemctl enable php-fpm
Step 3: Nginx/Apache-এ কনফিগার করুন
Nginx Example:
nginxCopyEditserver {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html index.htm;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
}
Apache Example (With mod_proxy_fcgi):
apacheCopyEdit<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php8.1-fpm.sock|fcgi://localhost/"
</FilesMatch>
Step 4: PHP-FPM Pool Configuration
প্রতি সাইট/ইউজারের জন্য আলাদা pool সেট করুন
ফাইল: /etc/php/8.1/fpm/pool.d/www.conf
confCopyEdit[www]
user = www-data
group = www-data
listen = /run/php/php8.1-fpm.sock
pm = dynamic
pm.max_children = 20
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
PHP-FPM Configuration Best Practices (সেরা কনফিগারেশন টিপস)
- pm.max_children: সার্ভারের র্যাম অনুযায়ী ঠিক করুন (প্রতি child process কতটুকু RAM খায় হিসেব করুন)।
- pm = dynamic: Dynamic mode-এ process গুলো অটো স্কেল করে, কম resource খায়।
- slowlog: Slow query detect করার জন্য slowlog চালু করুন।
- security.limit_extensions: শুধু দরকারি extension চালু রাখুন।
WordPress-এর জন্য PHP-FPM কেন অপরিহার্য?
- Huge Traffic Support:
WordPress-based ওয়েবসাইটে হাজারো ইউজার এলে traditional PHP প্রায়ই fail করে, কিন্তু PHP-FPM effortlessly handle করতে পারে। - Better Caching:
PHP-FPM caching system-এর সাথে অসাধারণ ভাবে sync করে। - Custom User Pool:
WordPress Multisite বা বড় ক্লায়েন্ট সাইটে pool-wise customization পাওয়া যায়।
PHP-FPM Security Tips
- প্রতি সাইট বা ইউজারের জন্য আলাদা pool সেট করুন।
- process manager ও resource limit দিন (DDOS, brute-force protection)।
- error log & slowlog নিয়মিত মনিটর করুন।
- pool config-এ open_basedir ও disable_functions ব্যবহার করুন।
PHP-FPM সমস্যা ও সমাধান (Troubleshooting)
সমস্যা: “502 Bad Gateway”
সমাধান:
- php-fpm সার্ভিস চলছে কিনা চেক করুন:
sudo systemctl status php-fpm
- nginx/apache config এ socket/port ঠিক আছে কিনা চেক করুন।
/var/log/php-fpm.log
চেক করুন।
সমস্যা: High Memory Usage
সমাধান:
- pm.max_children কমান।
- unnecessary extension বন্ধ করুন।
- slowlog দিয়ে খারাপ স্ক্রিপ্ট চিহ্নিত করুন।
PHP-FPM Performance Tuning Checklist
- pm.max_children, pm.max_requests, pm.process_idle_timeout ঠিক মতো সেট করুন।
- realpath_cache_size ও opcache সঠিকভাবে কনফিগার করুন।
- সার্ভারে SSD ব্যবহার করুন।
- monitoring tool (NewRelic, Datadog, Netdata) ব্যবহার করুন।
PHP-FPM ও DevOps Automation
- Ansible, Chef, Puppet, Docker ইত্যাদির সাথে PHP-FPM ইজি ইন্টিগ্রেশন।
- auto-scaling ও resource optimization-এ অপরিহার্য।