apache-worker-php-fcgi-in-centos-6
โดย default แล้ว Apache ที่ทำงานบน CentOS จะทำงานในโหมด Prefork ที่รองรับการทำงานร่วมกับ PHP module แต่ถ้าหากระบบต้องรองรับโหลดที่หนัก และจำเป็นต้องเปลี่ยนการทำงานเป็น Apache worker + PHP fcgi (หรือ PHP fastcgi) เพื่อช่วยลดการใช้งาน memory ที่สูง (เมื่อใช้งานในโหมด Prefork)

สำหรับ CentOS สามารถติดตั้ง Apache2 worker MPM และ FCGI ได้ง่ายกว่า Ubuntu เล็กน้อย เนื่องจากว่า Apache บน CentOS สามารถทำงานได้ทั้งโหมด Prefork และ Worker ซึ่งไม่จำเป็นต้อง Uninstall และ Install apache ใหม่ และ PHP FCGI ก็มี package ให้ติดตั้งผ่านคำสั่ง yum

การติดตั้ง Apache2 worker MPM และ PHP FCGI

  1. ติดตั้ง EPEL repo ด้วยคำสั่ง
    CenOS 5
    # rpm -ivh http://mirror1.ku.ac.th/fedora-epel/5/x86_64/epel-release-5-4.noarch.rpm

    CentOS 6
    # rpm -ivh http://mirror1.ku.ac.th/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm

  2. ติดตั้ง Apache และ fcgid ด้วยคำสั่งด้านล่าง
    # yum install httpd php-cgi mod_fcgid
  3. หลังจากติดตั้ง Apache และ fcgid เสร็จแล้วจำเป็นต้องแก้ไขให้ Apache ทำงานแบบ worker MPM โดยทำการแก้ไขที่ไฟล์ /etc/sysconfig/httpd ให้ uncomment ที่บรรทัดด้านล่าง หรือ copy ไปวางได้เลย
    HTTPD=/usr/sbin/httpd.worker
  4. ทำการ disable mod php ซึ่งโดยปกติแล้วเมื่อเราลง apache และ php ระบบ centos จะลง mod php ให้โดยอัตโนมัติ
    # cd /etc/httpd/conf.d/
    # mv php.conf php.conf.orig
  5. Setup FCGI สำหรับ php ด้วยการแก้ไขไฟล์ php.ini
    # vi /etc/php.ini
    และให้เพิ่ม หรือ uncomment parameter ด้านล่าง
    cgi.fix_pathinfo = 1
  6. เพิ่ม php script handler สำหรับ fcgid โดยเพิ่ม parameter ด้านล่างเข้าไปที่ไฟล์ /etc/httpd/conf.d/fcgid.conf
    AddHandler fcgid-script .php
    FCGIWrapper /var/www/cgi-bin/php-fcgi .php
    AddType text/html .php
    DirectoryIndex index.php
  7. สร้าง FCGIWrapper เพื่อเป็นตัว Interpreter สำหรับ PHP script
    # vi /var/www/cgi-bin/php-fcgi
    ให้ใส่ข้อมูลด้านล่างเข้าไป
    #!/bin/sh
    PHPRC=/etc/
    export PHPRC
    export PHP_FCGI_MAX_REQUESTS=5000
    export PHP_FCGI_CHILDREN=0
    exec /usr/bin/php-cgi
  8. แก้ไข permission ให้สามารถ execute ได้ทุก user ด้วยคำสั่ง
    # chmod 755 /var/www/cgi-bin/php-fcgi
  9. เพิ่ม +ExecCGI ตรง options ของ vhost ต่างๆ ดังตัวอย่างด้านล่าง เพื่อกำหนดให้ vhost นี้สามารถรัน cgi ได้
    <Directory /var/www/vhost/htdocs>
    Options -Indexes FollowSymLinks +ExecCGI
    AllowOverride All
    </Directory>
  10. เมื่อแก้ไขค่าต่างๆเรียบร้อยแล้วให้ลอง test config ที่ได้แก้ไขไปด้วยคำสั่ง
    # service httpd configtest
  11. ถ้าหากไม่มี error อะไรก็สามารถ restart apache ได้เลย ด้วยคำสั่ง
    # service httpd restart

การติดตั้ง PHP-APC

  1. ทำการติดตั้ง PHP-APC ด้วยคำสั่งด้านล่าง
    # yum install php-pecl-apc
  2. หลังจากติดตั้งแล้วให้แก้ไขที่ไฟล์ /etc/php.d/apc.ini โดยต้องให้แน่ใจว่า apc.enabled=1 จากนั้นกำหนดขนาดของ shared memory ที่จะให้ APC ใช้ ที่ parameter apc.shm_size ในตัวอย่างด้านล่างนี้กำหนดให้สามารถใช้งาน memory ได้ถึง 128MB
    apc.shm_size=128M
  3. เมื่อแก้ไขค่าเสร็จแล้วให้ restart apache เพื่อให้ apache โหลดค่า config ใหม่เข้ามา ด้วยคำสั่ง
    # service httpd restart