Computer >> คอมพิวเตอร์ >  >> ระบบ >> Linux

วิธีกำหนดค่า Apache และ PHP สำหรับเว็บไซต์ที่มีการเข้าชมสูงบน Linux Server

วิธีกำหนดค่า Apache และ PHP สำหรับเว็บไซต์ที่มีการเข้าชมสูงบน Linux Server

เกือบทุกบทช่วยสอนเกี่ยวกับวิธีการติดตั้ง LAMP stack (Linux, Apache, MySQL, PHP) จะแนะนำให้คุณใช้โมดูล Apache ในตัวสำหรับการประมวลผลสคริปต์ PHP ตัวอย่างเช่น ใน Ubuntu คุณจะเปิดใช้งานสิ่งนี้เมื่อคุณใช้คำสั่งเช่น sudo apt install libapache2-mod-php เพื่อติดตั้งแพ็คเกจ สิ่งนี้จะบังคับให้ Apache ใช้ mpm_prefork ทุกครั้งที่ผู้เยี่ยมชมเข้าถึงเว็บไซต์ของคุณ จะมีการเปิดตัวกระบวนการใหม่เพื่อจัดการกับการเชื่อมต่อนั้น วิธีนี้ใช้ได้ผลดีเมื่อปริมาณการใช้ข้อมูลต่ำ

แต่จะกลายเป็นปัญหาใหญ่หากคุณมีการจราจรติดขัดอย่างกะทันหัน ตัวอย่างเช่น โพสต์ใน Reddit อาจรวมเว็บไซต์ของคุณด้วย และหากโพสต์ดังกล่าวได้รับความนิยม คุณอาจมีผู้เข้าชมหลายพันคนในเวลาเพียงไม่กี่นาที

ในกรณีที่ดีที่สุด หาก Apache สามารถจัดการกับการรับส่งข้อมูลที่ล้นหลาม ผู้เยี่ยมชมที่โชคไม่ดีบางคนอาจต้องรอประมาณสามสิบถึงหกสิบวินาทีจนกว่าหน้าจะโหลดขึ้น ซึ่งเป็นเรื่องไร้สาระในโลกปัจจุบัน ในกรณีที่เลวร้ายที่สุด เซิร์ฟเวอร์จะเริ่มล่าช้าอย่างรุนแรง และการเชื่อมต่อบางส่วนจะหายไปเนื่องจากขาดทรัพยากร ในกรณีนี้ผู้เข้าชมจะเห็นข้อผิดพลาดในเบราว์เซอร์

ไม่ใช่สถานการณ์ที่ดีแต่อย่างใด เนื่องจากคุณอาจสูญเสียความสนใจจากผู้อ่าน ลูกค้า หรือแฟนๆ ที่สนใจหลายร้อยหรือหลายพันคน

น่าเสียดายที่ PHP เป็นทรัพยากรที่ค่อนข้างใหญ่ แต่ด้วย mpm_event Apache สามารถจัดการกับการรับส่งข้อมูลอย่างกะทันหันได้อย่างมีประสิทธิภาพมากขึ้น ขอแนะนำว่าเซิร์ฟเวอร์ของคุณควรมี RAM อย่างน้อย 2GB และคอร์ CPU 2 คอร์ ทั้งแบบจริงหรือแบบเสมือน และมากยิ่งขึ้นหากคุณคาดว่าจะมีการรับส่งข้อมูลที่พุ่งสูงขึ้นอย่างรวดเร็ว เช่น ผู้เข้าชมมากกว่าสิบคนต่อวินาที หากคุณกำลังใช้เซิร์ฟเวอร์ส่วนตัวเสมือน ให้เพิ่มแกน CPU เสมือนเพิ่มเติมให้กับสถานการณ์และพื้นที่จัดเก็บ SSD ของคุณ RAM เป็นเรื่องรอง

วิธีใช้เหตุการณ์ Apache MPM และ PHP-FPM บนการกระจายแบบเดเบียน

บน Debian, Ubuntu หรือ distros อื่น ๆ จากตระกูลนี้ ให้หลีกเลี่ยงการติดตั้งแพ็คเกจ “libapache2-mod-php” เมื่อคุณติดตั้ง Apache จะใช้เหตุการณ์ MPM โดยค่าเริ่มต้น แต่เมื่อติดตั้งแพ็คเกจดังกล่าว สคริปต์จะปิดใช้งานเหตุการณ์ MPM และเปิดใช้งาน MPM prefork โมดูล Apache PHP สามารถทำงานได้ (อย่างปลอดภัย) กับ mpm_prefork เท่านั้น แน่นอน ถ้าไม่มี “libapache2-mod-php” คุณจะไม่มีตัวประมวลผลสำหรับไฟล์ PHP ดังนั้น คุณจะใช้ PHP-FPM แทนโมดูล PHP ที่รวมอยู่ใน Apache นี่คือวิธีที่คุณจะติดตั้ง LAMP stack บนเซิร์ฟเวอร์ใหม่ คุณสามารถปรับขั้นตอนตามความต้องการของเว็บแอปพลิเคชันของคุณได้

ขั้นแรกให้เข้าสู่ระบบในฐานะรูท จากนั้นติดตั้ง Apache

apt update && apt install apache2

ณ จุดนี้คุณจะเห็นว่า Apache จัดส่งโดยเปิดใช้งานเหตุการณ์ MPM ตามค่าเริ่มต้น

apachectl -V

วิธีกำหนดค่า Apache และ PHP สำหรับเว็บไซต์ที่มีการเข้าชมสูงบน Linux Server

ติดตั้ง PHP-FPM

apt install php-fpm

คุณจะเห็นคำแนะนำเกี่ยวกับวิธีการเปิดใช้งานโปรเซสเซอร์ PHP ใน Apache

วิธีกำหนดค่า Apache และ PHP สำหรับเว็บไซต์ที่มีการเข้าชมสูงบน Linux Server

เปิดใช้งานโปรโตคอล FastCGI

a2enmod proxy_fcgi

เปิดใช้งานการกำหนดค่าเริ่มต้น PHP-FPM สำหรับ Apache

a2enconf php7.0-fpm

หมายเหตุ :ใน Debian/Ubuntu เวอร์ชันต่อๆ ไป คำสั่งนี้สามารถเปลี่ยนเป็นอย่างอื่นได้ เช่น a2enconf php7.6-fpm เพราะ PHP-FPM จะเป็นเวอร์ชันอื่น

รีสตาร์ท Apache

systemctl restart apache2

ติดตั้งข้อกำหนดที่เหลือสำหรับแอปพลิเคชัน PHP ของคุณ นี่คือตัวอย่าง:

apt install mariadb-server php-mysql

ซึ่งจะติดตั้งเซิร์ฟเวอร์ฐานข้อมูลและโมดูล PHP MySQL เพื่อให้แอปพลิเคชัน PHP ของคุณสามารถเชื่อมต่อกับฐานข้อมูลได้

วิธีใช้เหตุการณ์ Apache MPM และ PHP-FPM บน RedHat-Based Distributions

ตัวเลือกการกระจายเซิร์ฟเวอร์ยอดนิยมอื่น ๆ คือ RedHat หรือ CentOS ในลักษณะเดียวกับข้างต้น จะมีการนำเสนอตัวอย่างการติดตั้ง Apache ใหม่ทั้งหมดโดยเปิดใช้งานเหตุการณ์ MPM และ PHP-FPM

เข้าสู่ระบบในฐานะรูทและติดตั้ง Apache

yum install httpd

แตกต่างจาก distros ที่ใช้ Debian ในที่นี้ คุณจะเห็นว่า Apache ใช้ MPM prefork เป็นค่าเริ่มต้น อย่างน้อยใน CentOS 7 ล่าสุดที่มีให้ในขณะที่เขียน

apachectl -V

วิธีกำหนดค่า Apache และ PHP สำหรับเว็บไซต์ที่มีการเข้าชมสูงบน Linux Server

หากต้องการเปิดใช้งานเหตุการณ์ MPM คุณต้องแก้ไขไฟล์การกำหนดค่า

sed -i '/mpm_prefork\.so$/s/^/#/' /etc/httpd/conf.modules.d/00-mpm.conf

นี่จะเพิ่ม # ลงชื่อเข้าใช้เพื่อแสดงความคิดเห็น (ปิดใช้งาน) บรรทัด LoadModule mpm_prefork_module modules/mod_mpm_prefork.so .

วิธีกำหนดค่า Apache และ PHP สำหรับเว็บไซต์ที่มีการเข้าชมสูงบน Linux Server

ตอนนี้ยกเลิกความคิดเห็น (เปิดใช้งาน) บรรทัด #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

วิธีกำหนดค่า Apache และ PHP สำหรับเว็บไซต์ที่มีการเข้าชมสูงบน Linux Server

ติดตั้งโมดูล PHP-FPM และ FastCGI

yum install php-fpm mod_fcgid

สร้าง “/etc/httpd/conf.d/php.conf” เพื่อสั่ง Apache เกี่ยวกับวิธีประมวลผลไฟล์ PHP คัดลอกเนื้อหาทั้งหมดด้านล่าง และวางทั้งหมดพร้อมกันในเทอร์มินัล จากนั้นกด 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

เครดิตสำหรับการกำหนดค่าที่ยอดเยี่ยมนี้ตกเป็นของ Debian แหล่งข้อมูลอื่นแนะนำไฟล์การกำหนดค่าอย่างง่าย เช่น:

<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