Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

ตั้งค่า Apache และ PHP สำหรับเว็บไซต์トラフィックสูงบน Linux Server

เกือบทุก tutorial ติดตั้ง LAMP stack (Linux, Apache, MySQL, PHP) แนะนำใช้ built-in Apache module ประมวลผล PHP scripts เช่น Ubuntu ใช้คำสั่ง sudo apt install libapache2-mod-php ติดตั้งแพ็กเกจ จะบังคับ Apache ใช้ mpm_prefork ทุกครั้ง visitor เข้าเว็บ จะ launch process ใหม่จัดการ connection ทำงานดีตอน traffic ต่ำ

แตกลายเป็นปัญหาใหญ่ถ้าได้ traffic burst หนะ เช่น Reddit post รวมเว็บไซต์คุณ post ได้ popular อาจได้ thousands of visitors ในไม่กี่นาที

Best case: Apache จัดการ traffic burst ได้ บาง visitors รอ 30-60 วินาทีโหลดหน้า ซึ่ง absurd ในโลกวันนี้ Worst case: server lag สลบ connections drop เพราะขาดทรัพยากร visitors เห็น error บน browser

ไม่ดีทั้งคู่ เพราะอาจสูญเสีย attention ของร้อยหรือพัน interested readers, customers หรือ fans

น่าเสียดาย PHP resource hog ทั้งคู่ แตกับ mpm_event Apache จัดการ traffic bursts ได้มีประสิทธิภาพมากกว่า แนะนำ server ควรมี RAM อย่างน้อย 2GB และ 2 CPU cores real หรือ virtual และมากกว่านี้ถ้าคาดว่าจะมี intense traffic spikes เช่น >10 visitors/second ถ้าใช้ VPS เพิ่ม virtual CPU cores และ SSD storage RAM เป็นรอง

วิธีใช้ Apache MPM Event และ PHP-FPM บน Debian-based Distributions

บน Debian, Ubuntu หรือ distros ใน họนี้ หลีกเลี่ยงติดตั้งแพ็กเกจ "libapache2-mod-php" ติดตั้ง Apache ใช้ MPM event default แตติดตั้งแพ็กเกจกล่าว script disable MPM event enable MPM prefork Apache PHP module ทำงาน (อย่างปลอดภัย) กับ mpm_prefork เท่านั้น โดยไม่มี "libapache2-mod-php" ไม่มี processor สำหรับ PHP files ใช้ PHP-FPM แทน PHP module ใน Apache วิธีติดตั้ง LAMP stack บน fresh server ปรับขั้นตอนตาม web application requirements

ล็อกอินเป็น root ติดตั้ง Apache

apt update && apt install apache2

จุดนี้เห็นว่า Apache ship ด้วย MPM event enabled default

apachectl -V

ติดตั้ง PHP-FPM

apt install php-fpm

จะเห็นคำแนะนำ enable PHP processor ใน Apache

เปิดใช้งาน FastCGI protocol

a2enmod proxy_fcgi

เปิดใช้งาน PHP-FPM default configuration สำหรับ Apache

a2enconf php7.0-fpm

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

Restart Apache

systemctl restart apache2

ติดตั้ง requirements ที่เหลือสำหรับ PHP application ตัวอย่าง:

apt install mariadb-server php-mysql

ติดตั้ง database server และ PHP MySQL module ให้ PHP application connect database ได้

วิธีใช้ Apache MPM Event และ PHP-FPM บน RedHat-based Distributions

อีกตัวเลือก server distribution ยอดนิยมคือ RedHat หรือ CentOS 同样的方式 例清洁安装 Apache MPM event enabled และ PHP-FPM

ล็อกอิน root ติดตั้ง Apache

yum install httpd

ต่างจาก Debian-based distros ที่นี่ Apache ใช้ MPM prefork default อย่างน้อย CentOS 7 latest เวลาเขียน

apachectl -V

เพื่อ enable MPM event ต้องแก้ไข config file

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

จะเพิ่ม # sign comment (inactivate) บรรทัด LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

ตอนนี้ uncomment (activate) บรรทัด #LoadModule mpm_event_module modules/mod_mpm_event.so ลบ # นำหน้าด้วยคำสั่ง:

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

Start Apache และ enable autostart ตอนบูต

systemctl start httpd.service systemctl enable httpd.service

เช็คว่า Apache ใช้ MPM event ตอนนี้

apachectl -V

ติดตั้ง PHP-FPM และ FastCGI module

yum install php-fpm mod_fcgid

สร้าง "/etc/httpd/conf.d/php.conf" สั่ง Apache จัดการ PHP files คัดลอกเนื้อหาด้านล่างทั้งหมด วางใน terminal กด ENTER

cat < /etc/httpd/conf.d/php.conf
# Redirect to local php-fpm if mod_php is not available


# 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



PASTE

Credit config ดีนี้ไปที่ Debian แหล่งอื่นแนะนำ simple config file เช่น:

 SetHandler "proxy:fcgi://127.0.0.1:9000" 

แต vulnerable ต่อบาง attacks ถ้าบริการบางอย่าง fail อาจ expose PHP files สู่สาธารณะ จน expose stored passwords, code และ sensitive data

Restart Apache

systemctl restart httpd.service

Start PHP-FPM และ enable autostart ตอนบูต

systemctl start php-fpm.service systemctl enable php-fpm.service

สรุป

ตอนนี้มี Apache server scale ดีกว่ากับ traffic แตจำว่าใช้ default settings คือ "best" สำหรับคนส่วนใหญ่ ถ้าอยากขย้ำ HTTP server ต้องอ่าน variables ที่ tune ได้ ค่าที่เหมาะสม up to server resources, expected traffic และ PHP application