ติดตั้ง Nginx พร้อม PHP-FPM จาก Source บน CentOS 6 เขียนเมื่อ 2011.10.08 โดย

มีสอบถามเข้ามาถึงวิธีติดตั้ง Nginx + PHP-FPM วันนี้ลองเอามาติดตั้งบน CentOS 6 ที่เพิ่งติดตั้งแบบ minimal ลงไปสดๆ เลย เขียนเป็นสูตรสำเร็จเลย

เริ่มจาก update package ทั้งหมดในเครื่อเสียก่อน
yum update -y

จากนั้นก็ติดตั้ง package ที่จำเป็นลงไป
yum install -y gcc gcc-c++ wget nano pcre-devel zlib-devel make libxml2 libxml2-devel libxslt libxslt-devel bzip2 bzip2-devel curl curl-devel libjpeg libjpeg-devel libpng libpng-devel gd gd-devel mysql mysql-devel mysql-server net-snmp net-snmp-devel freetype-devel libtool-ltdl-devel ncurses ncurses-devel libevent-devel

ติดตั้ง Nginx ในที่นี้ใช้ latest stable version
wget http://nginx.org/download/nginx-1.0.8.tar.gz
tar xf nginx-1.0.8.tar.gz
cd nginx-1.0.8
./configure --with-http_stub_status_module
make
make install

เสร็จการติดตั้ง Nginx ติดตั้ง PHP โดยใช้ patch PHP-FPM
wget "http://th.php.net/get/php-5.2.17.tar.gz/from/this/mirror"
tar xvfz php-5.2.17.tar.gz
cd php-5.2.17
wget http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz
gunzip php-5.2.17-fpm-0.5.14.diff.gz
patch -p1 < php-5.2.17-fpm-0.5.14.diff
./configure --enable-fastcgi --enable-force-cgi-redirect --enable-safe-mode --with-openssl --with-zlib --enable-bcmath --with-bz2 --enable-calendar --with-curl --with-curlwrappers --enable-dba --enable-exif --with-pcre --enable-ftp --with-gd --with-ttf --with-freetype --enable-gd-native-ttf --enable-gd-jis-conv --enable-mbstring --with-mhash --with-mysql --with-mysql-sock --with-mysqli --enable-pcntl --with-pdo-mysql --enable-shmop --with-libxml --with-snmp --enable-ucd-snmp-hack --enable-soap --enable-sockets --with-regex --enable-wddx --with-xmlrpc --with-iconv --with-xsl --enable-zip --with-jpeg-dir=/usr/lib --with-freetype-dir=/usr/lib --libdir=/usr/lib --enable-fpm --with-libevent
make
make install
cp php.ini-recommended /usr/lib/php.ini

จากนั้นเขียน init script ด้วยคำสั่ง
nano /etc/init.d/nginx

จากนั้นก็ใส่ข้อมูลตามนี้
#!/bin/sh

# nginx - this script starts and stops the nginx daemin
#
#
#
# chkconfig: - 85 15
#
# description: Nginx is an HTTP(S) server, HTTP(S) reverse
#
# proxy and IMAP/POP3 proxy server
#
# processname: nginx
#
# config: /usr/local/nginx/conf/nginx.conf
#
# pidfile: /usr/local/nginx/logs/nginx.pid
#

#
# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

lockfile=/var/lock/subsys/nginx

[ -f /etc/sysconfig/phpfastcgi ] && . /etc/sysconfig/phpfastcgi

start() {
/usr/local/sbin/php-fpm start

[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}

stop() {
/usr/local/sbin/php-fpm stop

echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}

restart() {
configtest || return $?
stop
start
}

reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}

force_reload() {
restart
}

configtest() {
$nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
status $prog
}

rh_status_q() {
rh_status >/dev/null 2>&1
}

case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac

จากนั้นทำการเปลี่ยนโหมด, ตั้งให้ทำงานเมื่อบูต
chmod +x /etc/init.d/nginx
chkconfig nginx on

เรายังต้องตั้งค่าตัว PHP-FPM ด้วยโดยไฟล์จะอยู่ที่ /usr/local/etc/php-fpm.conf ให้แก้ไขเอา comment ออก

<value name="user">nobody</value>
<value name="group">nobody</value>

โดยเราสามารถตั้งค่าให้เป็น user และ group ที่เราต้องการได้ในส่วนนี้เช่นกัน
อีกส่วนที่เราควรตั้งค่าคือ
<value name="style">static</value>

เราสามารถตั้งค่าเป็น apache-like เพื่อให้ประสิทธิภาพการทำงานที่ดีกว่าได้
เท่านี้ก็พร้อมทำงานแล้ว สั่งให้ Nginx ทำงานโดย
service nginx start

แล้วลองเข้าผ่าน ip จะพบข้อความต้อนรับ
ส่วนการตั้งค่าให้แต่ละ vHost รองรับการทำงาน php ก็ใส่
location ~ \\.php$ {
index index.php;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /path/to/webroot$fastcgi_script_name;
include fastcgi_params;
}

เท่านี้ในแต่ละ vHost ก็สามารถใช้งาน php ได้แล้วครับ



คำเตือนคำเตือน เนื้อหาต่างๆ ในบทความ รวมถึงรูปภาพทั้งหมดในบทความนี้ เป็นความเห็นส่วนตัวของผู้เขียนแต่ละคน ซึ่งแต่ละคนได้ทำการลงทะเบียน และเขียนบทความลงใน Modoeye Articles นี้โดยไม่มีค่าธรรมเนียมใดๆ บทความเหล่านี้เป้าหมายเพื่อการศึกษา และความบันเทิงเท่านั้น การนำส่วนหนึ่งส่วนใดของบทความไปใช้งาน ควรทำการอ้างอิงถึงผู้เขียนและแหล่งที่มาด้วย