LAMP স্ট্যাক (Linux, Apache, MySQL, PHP) ইনস্টল করার প্রায় সকল টিউটোরিয়াল সুপারিশ করবে যে আপনি PHP স্ক্রিপ্ট প্রসেস করার জন্য Apache-এর বিল্ট-ইন মডিউল ব্যবহার করুন। উদাহরণস্বরূপ, উবুন্টুতে আপনি sudo apt install libapache2-mod-php কমান্ড দিয়ে একটি প্যাকেজ ইনস্টল করলে এটি সক্ষম হয়। এটি বাধ্য করবে Apache কে mpm_prefork ব্যবহার করতে। প্রতিবার একজন ভিজিটর আপনার ওয়েবসাইট অ্যাক্সেস করলে, সেই কানেকশন হ্যান্ডেল করার জন্য একটি নতুন প্রসেস লঞ্চ হবে। ট্রাফিক কম থাকলে এটি ভালো কাজ করে।
কিন্তু, এটি একটি বড় সমস্যা হয়ে ওঠে আপনি যদি হঠাৎ ট্রাফিক বার্স্ট পান। উদাহরণস্বরূপ, একটি Reddit পোস্ট আপনার ওয়েবসাইট অন্তর্ভুক্ত করতে পারে, এবং যদি পোস্টটি জনপ্রিয় হয়, তবে আপনি মাত্র কিছু মিনিটে হাজার হাজার ভিজিটর পেতে পারেন।
সर्वোত্তম কেসে, যদি Apache ট্রাফিক বার্স্ট হ্যান্ডেল করতে পারে, কিছু অস্থির ভিজিটরকে হয়তো ত্রিশ থেকে ষাট সেকেন্ড অপেক্ষা করতে হয় পেজ লোড হওয়ার জন্য, যা আজকের বিশ্বে অদ্ভুত। সবচেয়ে খারাপ কেসে, সার্ভার বুरीভাবে ল্যাগ করা শুরু করবে, এবং কিছু কানেকশন সরাসরি ড্রপ হবে রিসোর্সের অভাবের কারণে। এই কেসে ভিজিটররা তাদের ব্রাউজারে এরর দেখবে।
এই দুটো কেসেই এটি ভালো সিনেরিও নয়, কারণ আপনি পটেনশিয়ালি সैंकড়ों বা হাজার হাজার আগ্রহী পাঠক, কাস্টমার বা ফ্যানদের মনোগ্রাহণ হারিয়ে ফেলতে পারেন।
দুর্ভাগ্যবশত, PHP যেভাবেই হোক রিসোর্স হগ। কিন্তু, mpm_event-র সাথে, Apache হঠাৎ ট্রাফিক বার্স্ট অনেক বেশি দক্ষতার সাথে হ্যান্ডেল করতে পারে। সুপারিশ করা হয়, যে আপনার সার্ভারে কমপক্ষে ২GB RAM এবং ২ CPU কোর, রিয়েল বা ভার্চুয়াল, এবং আরও বেশি যদি আপনি ইন্টেন্স ট্রাফিক স্পাইক এক্সপেক্ট করেন, যেমন সেকেন্ডে দশটির বেশি ভিজিটর। আপনি যদি ভার্চুয়াল প্রাইভেট সার্ভার ব্যবহার করেন, তবে আরও ভার্চুয়াল CPU কোর এবং SSD স্টোরেজ যোগ করুন। RAM দ্বিতীয় প্রাধান্য।
ডেবিয়ান-ভিত্তিক ডিস্ট্রিবিউশনে Apache MPM Event এবং PHP-FPM ব্যবহার করা
ডেবিয়ান, উবুন্টু বা এই পরিবারের অন্যান্য ডিস্ট্রোতে শুধু "libapache2-mod-php" প্যাকেজটি ইনস্টল না করাই ভালো। Apache ইনস্টল করলে ডিফল্টরূপে MPM event ব্যবহার করে। কিন্তু উল্লিখিত প্যাকেজটি ইনস্টল করলে, একটি স্ক্রিপ্ট MPM event অক্ষম করে এবং MPM prefork সক্ষম করে। Apache PHP মডিউল শুধু mpm_prefork-এ (নিরাপদে) কাজ করতে পারে। অবশ্যই, "libapache2-mod-php" ছাড়া, আপনার কাছে PHP ফাইল প্রসেসরের জন্য কোনো প্রসেসর নেই। তাই আপনি Apache-এ অন্তর্ভুক্ত PHP মডিউলের বদলে PHP-FPM ব্যবহার করবেন। এখানে একটি নতুন সার্ভারে LAMP স্ট্যাক ইনস্টল করার পদ্ধতি দেওয়া হলো। আপনি আপনার ওয়েব অ্যাপ্লিকেশনের প্রয়োজনীয়তা অনুযায়ী ধাপগুলো উপযোগী করতে পারেন।
প্রথমে, রুট হিসেবে লগ ইন করুন। তারপর Apache ইনস্টল করুন।
apt update && apt install apache2
এই পয়েন্টে আপনি দেখতে পাবেন যে Apache নিশ্চিতভাবেই MPM event ডিফল্টরূপে সক্ষম থাকা অবস্থায় শিপ হয়েছে।
apachectl -V

PHP-FPM ইনস্টল করুন।
apt install php-fpm
আপনি Apache-এ PHP প্রসেসর সক্ষম করার নির্দেশিকা দেখবেন।

FastCGI প্রোটোকল সক্ষম করুন।
a2enmod proxy_fcgi
Apache-এর জন্য PHP-FPM ডিফল্ট কনফিগারেশন সক্ষম করুন।
a2enconf php7.0-fpm
নোট: ভবিষ্যতে ডেবিয়ান/উবুন্টুর ভার্সনে, এই কমান্ডটি কিছুটা পরিবর্তন হতে পারে, যেমন a2enconf php7.6-fpm, কারণ PHP-FPM একটি ভিন্ন ভার্সন হবে।
Apache রিস্টার্ট করুন।
systemctl restart apache2
আপনার PHP অ্যাপ্লিকেশনের বাকি প্রয়োজনীয়তা ইনস্টল করুন। এখানে একটি উদাহরণ:
apt install mariadb-server php-mysql
এটি একটি ডাটাবেস সার্ভার এবং PHP MySQL মডিউল ইনস্টল করবে যাতে আপনার PHP অ্যাপ্লিকেশন ডাটাবেসের সাথে সংযুক্ত হতে পারে।
RedHat-ভিত্তিক ডিস্ট্রিবিউশনে Apache MPM Event এবং PHP-FPM ব্যবহার করা
অন্য জনপ্রিয় সার্ভার ডিস্ট্রিবিউশন পছন্দ হলো RedHat, বা CentOS। উপরের মতো একইভাবে, Apache-এর একটি ক্লিন ইনস্টলেশন MPM event সক্ষম এবং PHP-FPM সহ উদাহরণ হিসেবে দেওয়া হলো।
রুট হিসেবে লগ ইন করুন এবং Apache ইনস্টল করুন।
yum install httpd
ডেবিয়ান-ভিত্তিক ডিস্ট্রোর বিপরীতে, এখানে আপনি দেখবেন Apache ডিফল্টরূপে MPM prefork ব্যবহার করে, কমপক্ষে লেখার সময় উপলব্ধ লেটেস্ট CentOS 7-এ।
apachectl -V

MPM event সক্ষম করতে, আপনাকে একটি কনফিগারেশন ফাইল এডিট করতে হবে।
sed -i '/mpm_prefork\.so$/s/^/#/' /etc/httpd/conf.modules.d/00-mpm.conf
এটি LoadModule mpm_prefork_module modules/mod_mpm_prefork.so লাইনে একটি # চিহ্ন যোগ করবে যা কमेंট (নিষ্ক্রিয়) করবে।

এখন #LoadModule mpm_event_module modules/mod_mpm_event.so লাইনটি আনকমেন্ট (সক্রিয়) করুন আগের # চিহ্নটি মুছে পরবর্তী কমান্ড দিয়ে।
sed -i '/mpm_event\.so$/s/^#//' /etc/httpd/conf.modules.d/00-mpm.conf
Apache স্টার্ট করুন এবং বুটে অটোস্টার্টের জন্য সক্ষম করুন।
systemctl start httpd.service systemctl enable httpd.service
চেক করুন Apache এখন MPM event ব্যবহার করছে কিনা।
apachectl -V

PHP-FPM এবং FastCGI মডিউল ইনস্টল করুন।
yum install php-fpm mod_fcgid
"/etc/httpd/conf.d/php.conf" তৈরি করুন Apache-কে নির্দেশ দিতে যে PHP ফাইলগুলো কীভাবে প্রসেস করবে। নিচের সকল কন্টেন্ট কপি করুন, এবং একসাথে টার্মিন্যালে পেস্ট করুন, তারপর ENTER চাপুন।
cat </etc/httpd/conf.d/php.conf # Redirect to local php-fpm if mod_php is not available PASTE # Enable http authorization headers SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 #SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost" SetHandler "proxy:fcgi://127.0.0.1:9000" # Deny access to raw php sources by default # To re-enable it's recommended to enable access to the files # only in specific virtual host or directory Require all denied # Deny access to files without filename (e.g. '.php')Require all denied
এই দুর্দান্ত কনফিগারেশনের ক্রেডিট ডেবিয়ানের। অন্যান্য সোর্স একটি সিম্পল কনফিগারেশন ফাইল সুপারিশ করে যেমন:
<FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch>
কিন্তু এটি কিছু অ্যাটাকের सामने ευনরবল, এবং যদি নির্দিষ্ট সার্ভিস ফেল করে, তবে আপনি PHP ফাইলগুলো পাবলিকلي এক্সপোজ করতে পারেন, যা সেভ করা পাসওয়ার্ড, কোড এবং সেনসিটিভ ডেটা এক্সপোজ করতে পারে।
Apache রিস্টার্ট করুন।
systemctl restart httpd.service
PHP-FPM স্টার্ট করুন এবং বুটে এর অটোস্টার্ট সক্ষম করুন।
systemctl start php-fpm.service systemctl enable php-fpm.service
উপসংহার
আপনার কাছে এখন একটি Apache সার্ভার আছে যা ট্রাফিকের সাথে অনেক ভালো স্কেল করে। কিন্তু মনে রাখবেন যে আপনি ডিফল্ট সেটিংস ব্যবহার করছেন, যেটি "বেশির ভাগ মানুষের জন্য সেরা"। আপনি যদি আপনার HTTP সার্ভার থেকে সর্বোচ্চ আউটপুট পেতে চান, তবে আপনাকে বিভিন্ন টিউনেবল ভেরিয়েবল সম্পর্কে পড়তে হবে। সঠিক মানগুলো আপনার সার্ভারের রিসোর্স, এক্সপেক্টেড ট্রাফিক এবং PHP অ্যাপ্লিকেশনের ওপর অনেক নির্ভরশীল।