কম্পিউটার

লিনাক্স সার্ভারে উচ্চ ট্র্যাফিক ওয়েবসাইটগুলির জন্য অ্যাপাচি এবং পিএইচপি কীভাবে কনফিগার করবেন

লিনাক্স সার্ভারে উচ্চ ট্র্যাফিক ওয়েবসাইটগুলির জন্য অ্যাপাচি এবং পিএইচপি কীভাবে কনফিগার করবেন

LAMP স্ট্যাক (Linux, Apache, MySQL, PHP) কীভাবে ইনস্টল করবেন তার প্রায় প্রতিটি টিউটোরিয়াল সুপারিশ করবে যে আপনি পিএইচপি স্ক্রিপ্ট প্রক্রিয়াকরণের জন্য অন্তর্নির্মিত অ্যাপাচি মডিউল ব্যবহার করুন। উদাহরণস্বরূপ, উবুন্টুতে আপনি যখন sudo apt install libapache2-mod-php এর মতো একটি কমান্ড ব্যবহার করেন তখন আপনি এটি সক্ষম করবেন একটি প্যাকেজ ইনস্টল করতে। এটি Apache কে mpm_prefork ব্যবহার করতে বাধ্য করবে। প্রতিবার যখন একজন দর্শক আপনার ওয়েবসাইট অ্যাক্সেস করে, সেই সংযোগটি পরিচালনা করার জন্য একটি নতুন প্রক্রিয়া চালু করা হবে। ট্রাফিক কম হলে এটি ভাল কাজ করে।

কিন্তু, যদি আপনি হঠাৎ ট্র্যাফিকের বিস্ফোরণ পান তবে এটি একটি বিশাল সমস্যা হয়ে দাঁড়ায়। উদাহরণস্বরূপ, একটি Reddit পোস্ট আপনার ওয়েবসাইট অন্তর্ভুক্ত করতে পারে, এবং পোস্টটি জনপ্রিয় হলে, আপনি কয়েক মিনিটের মধ্যে হাজার হাজার দর্শক পেতে পারেন।

একটি সর্বোত্তম ক্ষেত্রে, যদি Apache ট্র্যাফিক বিস্ফোরণ পরিচালনা করতে সক্ষম হয়, কিছু দুর্ভাগ্য দর্শকদের পৃষ্ঠাটি লোড হওয়া পর্যন্ত সম্ভবত ত্রিশ থেকে ষাট সেকেন্ড অপেক্ষা করতে হতে পারে, যা আজকের বিশ্বে অযৌক্তিক। সবচেয়ে খারাপ পরিস্থিতিতে, সার্ভারটি খারাপভাবে পিছিয়ে যেতে শুরু করবে, এবং কিছু সংযোগগুলি সম্পদের অভাবের কারণে বাদ দেওয়া হবে। এই ক্ষেত্রে দর্শকরা তাদের ব্রাউজারে একটি ত্রুটি দেখতে পাবেন৷

এটা কোনোভাবেই ভালো দৃশ্য নয়, যেহেতু আপনি শত শত বা হাজার হাজার আগ্রহী পাঠক, গ্রাহক বা অনুরাগীদের মনোযোগ হারিয়ে ফেলেছেন।

দুর্ভাগ্যবশত, পিএইচপি একটি চমত্কার বড় সম্পদ হগ উভয় উপায়. কিন্তু, mpm_event এর সাথে, Apache ট্র্যাফিকের আকস্মিক বিস্ফোরণকে আরও কার্যকর উপায়ে পরিচালনা করতে পারে। যদিও, আপনার সার্ভারে কমপক্ষে 2GB RAM এবং 2 CPU কোর, বাস্তব বা ভার্চুয়াল, এবং এমনকি যদি আপনি প্রতি সেকেন্ডে দশের বেশি দর্শকের মতো তীব্র ট্র্যাফিক স্পাইক হওয়ার আশা করেন তবে এটি সুপারিশ করা হয়। আপনি যদি ভার্চুয়াল প্রাইভেট সার্ভার ব্যবহার করেন তবে আপনার পরিস্থিতি এবং এসএসডি স্টোরেজে আরও ভার্চুয়াল সিপিইউ কোর যোগ করুন। RAM গৌণ।

ডেবিয়ান-ভিত্তিক বিতরণে Apache MPM ইভেন্ট এবং PHP-FPM কীভাবে ব্যবহার করবেন

ডেবিয়ান, উবুন্টু বা এই পরিবারের অন্যান্য ডিস্ট্রোতে "libapache2-mod-php" প্যাকেজ ইনস্টল করা এড়িয়ে চলুন। আপনি যখন Apache ইনস্টল করেন এটি ডিফল্টরূপে MPM ইভেন্ট ব্যবহার করে। কিন্তু উল্লিখিত প্যাকেজ ইনস্টল করার পরে, একটি স্ক্রিপ্ট MPM ইভেন্ট নিষ্ক্রিয় করে এবং MPM প্রিফর্ক সক্ষম করে। Apache PHP মডিউল শুধুমাত্র mpm_prefork এর সাথে (নিরাপদভাবে) কাজ করতে পারে। অবশ্যই, "libapache2-mod-php" ছাড়া আপনার পিএইচপি ফাইলগুলির জন্য কোন প্রসেসর নেই। তাই আপনি Apache-এ অন্তর্ভুক্ত PHP মডিউলের পরিবর্তে PHP-FPM ব্যবহার করবেন। এখানে আপনি কিভাবে একটি নতুন সার্ভারে একটি LAMP স্ট্যাক ইনস্টল করবেন। আপনি আপনার ওয়েব অ্যাপ্লিকেশনের প্রয়োজনীয়তা অনুযায়ী পদক্ষেপগুলি মানিয়ে নিতে পারেন৷

প্রথমে রুট হিসেবে লগ ইন করুন। তারপর, Apache ইনস্টল করুন।

apt update && apt install apache2

এই মুহুর্তে আপনি দেখতে পাচ্ছেন যে অ্যাপাচি প্রকৃতপক্ষে ডিফল্টরূপে সক্ষম MPM ইভেন্টের সাথে শিপ করে৷

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

আপনার পিএইচপি অ্যাপ্লিকেশনের জন্য আপনার বাকি প্রয়োজনীয়তা ইনস্টল করুন। এখানে একটি উদাহরণ:

apt install mariadb-server php-mysql

এটি একটি ডাটাবেস সার্ভার এবং PHP MySQL মডিউল ইনস্টল করবে যাতে আপনার PHP অ্যাপ্লিকেশন একটি ডাটাবেসের সাথে সংযোগ করতে পারে৷

কিভাবে রেডহ্যাট-ভিত্তিক ডিস্ট্রিবিউশনে অ্যাপাচি এমপিএম ইভেন্ট এবং পিএইচপি-এফপিএম ব্যবহার করবেন

অন্যান্য জনপ্রিয় সার্ভার বিতরণ পছন্দ হল RedHat, বা CentOS। উপরের মত একইভাবে, MPM ইভেন্ট সক্ষম এবং PHP-FPM সহ Apache-এর পরিষ্কার ইনস্টলের একটি উদাহরণ দেওয়া হবে৷

রুট হিসাবে লগ ইন করুন এবং অ্যাপাচি ইনস্টল করুন।

yum install httpd

ডেবিয়ান-ভিত্তিক ডিস্ট্রোসের বিপরীতে, এখানে আপনি দেখতে পাবেন যে অ্যাপাচি ডিফল্টরূপে MPM প্রিফর্ক ব্যবহার করে, অন্তত লেখার সময় উপলব্ধ সর্বশেষ CentOS 7 এ।

apachectl -V

লিনাক্স সার্ভারে উচ্চ ট্র্যাফিক ওয়েবসাইটগুলির জন্য অ্যাপাচি এবং পিএইচপি কীভাবে কনফিগার করবেন

MPM ইভেন্ট সক্ষম করতে, আপনাকে একটি কনফিগারেশন ফাইল সম্পাদনা করতে হবে৷

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 ইভেন্ট ব্যবহার করে কিনা তা পরীক্ষা করুন৷

apachectl -V

লিনাক্স সার্ভারে উচ্চ ট্র্যাফিক ওয়েবসাইটগুলির জন্য অ্যাপাচি এবং পিএইচপি কীভাবে কনফিগার করবেন

PHP-FPM এবং FastCGI মডিউল ইনস্টল করুন।

yum install php-fpm mod_fcgid

পিএইচপি ফাইলগুলি কীভাবে প্রক্রিয়া করতে হয় সে সম্পর্কে অ্যাপাচিকে নির্দেশ দিতে "/etc/httpd/conf.d/php.conf" তৈরি করুন৷ নীচের সমস্ত বিষয়বস্তু অনুলিপি করুন, এবং টার্মিনালে একবারে পেস্ট করুন, তারপর ENTER টিপুন৷

cat <<PASTE > /etc/httpd/conf.d/php.conf
# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>
# Enable http authorization headers
<IfModule setenvif_module>
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
</IfModule>
 
<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
#SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
<FilesMatch ".+\.phps$">
# 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
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(p[3457]?|t|tml|ps)$">
Require all denied
</FilesMatch>
</IfModule>
</IfModule>
PASTE

এই দুর্দান্ত কনফিগারেশনের কৃতিত্ব ডেবিয়ানকে যায়। অন্যান্য উত্স একটি সাধারণ কনফিগারেশন ফাইলের সুপারিশ করে যেমন:

<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 অ্যাপ্লিকেশনের উপর অত্যন্ত নির্ভরশীল৷


  1. লিনাক্সে ওপেনবক্স উইন্ডো ম্যানেজার কীভাবে ইনস্টল এবং কনফিগার করবেন

  2. ম্যালওয়্যার এবং রুটকিটের জন্য কীভাবে একটি লিনাক্স সার্ভার স্ক্যান করবেন

  3. লিনাক্স ভিপিএস-এ কীভাবে CS:GO সার্ভার তৈরি করবেন

  4. OEL-তে উচ্চ প্রাপ্যতার জন্য ওরাকল ফর্ম এবং রিপোর্টগুলি ইনস্টল এবং কনফিগার করুন