ได้ยินเสียงร่ำลือว่า PHP-FPM (FastCGI Process Manager) รับ load รับ concurrency ได้เยอะเพราะมีการจัดการ process ดีกว่า mod_php ทำให้ใช้ resource น้อยกว่า ฟีเจอร์อื่นๆ มีอะไรบ้างดูในลิงก์ต้นฉบับครับ
เครื่องที่ติดตั้งของผมเป็น Ubuntu ซอฟต์แวร์ที่ต้องการติดตั้งได้ด้วย APT เลยสบายหน่อย
Installation
ติดตั้ง Apache2 และ mpm-worker
$sudo aptitude install apache2 apache2-mpm-worker
ติดตั้ง module fastcgi, php-fpm, php5
$sudo aptitude install libapache2-mod-fastcgi php5-fpm php5
enable module
$sudo a2enmod actions fastcgi alias
Configuration
Apache2
เนื่องจากเราจะใช้ fastcgi handle ไฟล์ที่เขียนด้วย PHP ต้องคอนฟิกเพิ่มเติม โดยถ้าต้องการใช้เฉพาะ VirtaulHost ก็เพิ่มเฉพาะไฟล์คอนฟิก VirtaulHost นั้นใน /etc/apache2/sites-enabled/VHOST_CONF_FILE แต่ถ้าต้องการใช้ทุก VirtaulHost แบบ global ก็เพิ่มไว้ที่ /etc/apache2/conf.d/php5-fpm.conf (ถ้าไม่มีไฟล์ให้สร้างใหม่) โดยเพิ่มคำสั่งตามนี้
1 2 3 4 5 6 7 |
<IfModule mod_fastcgi.c> AddHandler php5-fcgi .php Action php5-fcgi /php5-fcgi Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization </IfModule> |
FPM
1. /etc/php5/fpm/php.ini
ไฟล์คอนฟิกทั้งหมดของ php-fpm อยู่ที่ /etc/php5/fpm
ตอนนี้ php.ini ของเราจะไม่ได้ใช้ที่เดิมที่ /etc/php5/apache2/php.ini แล้วนะครับ ถ้าจะคอนฟิกอะไรเพิ่มให้ไปคอนฟิกที่ /etc/php5/fpm/php.ini แทน เช่นผมติดตั้ง MongoDB driver ก็ต้องไปเพิ่ม extension=mongo.so แทน
2. /etc/php5/fpm/pool.d/www.conf
ไฟล์นี้เป็นการคอนฟิก process manager ของ fpm แต่ละคน แต่ละงานใช้ไม่เหมือนกันก็เอาตามความเหมาะสมครับ ส่วนของผมเป็นตามนี้
1 2 3 4 5 6 7 8 |
[www] pm = dynamic pm.max_children = 10 pm.start_servers = 3 pm.min_spare_servers = 2 pm.max_spare_servers = 5 pm.max_requests = 500 |
เสร็จแล้วก็ restart ทั้ง Apache2 และ FPM
1 2 3 |
$sudo service apache2 reload $sudo service php-fpm reload |
Be First to Comment