ในการทำงานแบบ fast-cgi นี้จำเป็นต้องมีตัวทำการแตก (spawn) การทำงานออกไปด้วย ซึ่งในที่นี้ใช้ spawn-fcgi ที่ยืมมาจาก lighttpd อีกที เริ่ม download กันเลย
BASH
- wget http://www.lighttpd.net/download/spawn-fcgi-1.6.2.tar.gz
แตกไฟล์
BASH
- tar xzf spawn-fcgi-1.6.2.tar.gz
เปลี่ยน Directory ทำงาน
BASH
- cd spawn-fcgi-1.6.2
เริ่มทำการ Configure
BASH
- ./configure
จากนั้นก็ทำการ compile
BASH
- make
เสร็จแล้วก็จะได้ binary ของ spawn-fcgi ซึ่งจะอยู่ใน ./src ทำการ copy ไปไว้ใน /usr/bin
BASH
- cp ./src/spawn-fcgi /usr/bin/spawn-fcgi
ืทำการเขียน init script เพื่อให้ทำงานในแบบของ service ได้
BASH
- nano /etc/init.d/spawn-fcgi
โดยมีคำสั่งดังข้างล่าง
TEXT
- #!/bin/sh
- #
- # php-cgi - php-fastcgi swaping via spawn-fcgi
- #
- # chkconfig: - 85 15
- # description: Run php-cgi as app server
- # processname: php-cgi
- # config: /etc/sysconfig/phpfastcgi (defaults RH style)
- # pidfile: /var/run/php_cgi.pid
- # Note: See how to use this script :
- # http://www.cyberciti.biz/faq/rhel-fedora-install-configure-nginx-php5/
- # Source function library.
- . /etc/rc.d/init.d/functions
- # Source networking configuration.
- . /etc/sysconfig/network
- # Check that networking is up.
- [ "$NETWORKING" = "no" ] && exit 0
- spawnfcgi="/usr/bin/spawn-fcgi"
- php_cgi="/usr/local/bin/php-cgi"
- prog=$(basename $php_cgi)
- server_ip=127.0.0.1
- server_port=9000
- server_user=nginx
- server_group=nginx
- server_childs=5
- pidfile="/var/run/php_cgi.pid"
- # do not edit, put changes in /etc/sysconfig/phpfastcgi
- [ -f /etc/sysconfig/phpfastcgi ] && . /etc/sysconfig/phpfastcgi
- start() {
- [ -x $php_cgi ] || exit 1
- [ -x $spawnfcgi ] || exit 2
- echo -n $"Starting $prog: "
- daemon $spawnfcgi -a ${server_ip} -p ${server_port} -u ${server_user} -g ${server_group} -P ${pidfile} -C ${server_childs} -f ${php_cgi}
- retval=$?
- echo
- return $retval
- }
- stop() {
- echo -n $"Stopping $prog: "
- killproc -p ${pidfile} $prog -QUIT
- retval=$?
- echo
- [ -f ${pidfile} ] && /bin/rm -f ${pidfile}
- return $retval
- }
- restart(){
- stop
- sleep 2
- start
- }
- rh_status(){
- status -p ${pidfile} $prog
- }
- case "$1" in
- start)
- start;;
- stop)
- stop;;
- restart)
- restart;;
- status)
- rh_status;;
- *)
- echo $"Usage: $0 {start|stop|restart|status}"
- exit 3
- esac
จากนั้นทำการเพิ่ม permission ให้สามารถ execute ได้
BASH
- chmod +x /etc/init.d/spawn-fcgi
สั่งให้เริ่มต้นเมื่อ boot เครื่อง
BASH
- chkconfig spawn-fcgi on
ตอนนี้ spawn-fcgi จะทำงานอยู่ที่ port 900 ตามที่ระบุใน init script
ต่อไปเริ่มการติดตั้ง Nginx ด้วยการ download Nginx
BASH
- wget http://sysoev.ru/nginx/nginx-0.8.4.tar.gz
สร้าง user และ group สำหรับ nginx
BASH
- groupadd nginx
- useradd -g nginx nginx
แตกไฟล์
BASH
- tar xzf nginx-0.8.4.tar.gz
เปลี่ยน Directory
BASH
- cd nginx-0.8.4
เริ่มการ configure
BASH
- ./configure
ในที่นี้ต้องการเพียง standard module เท่านั้นถ้าต้องการ module อะไรเพิ่มให้ใส่ต่อท้ายได้เลย ส่วนถ้าต้องการดูว่ามี module อะไรบ้างให้ใช้คำสั่ง
BASH
- ./configure --help
เสร็จแล้วก็ทำการ compile
BASH
- make
แล้วก็ติดตั้ง
BASH
- make install
Nginx ที่ถูกติดตั้งจะอยู่ใน /usr/local/nginx จากนั้นทำการเขียน init script ไปไว้ที่ /etc/init.d เพื่อให้ทำงานในแบบ service ด้วย
BASH
- nano /etc/init.d/nginx
โดยมีคำสั่งดังข้างล่าง
TEXT
- #!/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
- 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() {
- 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
เพิ่ม permission ในให้ execute ได้
BASH
- chmod +x /etc/init.d/nginx
สั่งให้เริ่มทำงานหลังการ boot
BASH
- chkconfig nginx on
ตอนนี้ nginx พร้อมทำงานแล้วสามารถทดลองได้ด้วย
BASH
- service nginx start
จากนั้นลองเรียกใช้งานผ่าน ip address ดูจะพบคำว่า
Welcome to nginx!
ทีนี้เหลือแต่ให้ nginx รองรับการทำงาน php แบบ fast-cgi เท่านั้น โดยแก้ไขไฟล์ configuration ของ nginx ซึ่งอยู่ใน /usr/local/nginx/conf/nginx.confBASH
- nano /usr/local/nginx/conf/nginx.conf
ตั้งค่าให้ nginx ทำงานในด้วยสิทธิ์ของ nginx ที่ส่วนบนของไฟล์ให้ un-comment ในส่วนของ user แล้วใส่ดังข้างล่าง
TEXT
- user nginx nginx
ในส่วนของ location / ให้ใส่ wwwroot ของเว็บไซท์จะได้
จะมีส่วนตัวอย่างที่ comment เอาไว้ภายใต้ server ใส่
TEXT
- location ~ \.php$ {
- fastcgi_pass localhost:9000; # port where FastCGI processes were spawned
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME /home/administrator/public_html$fastcgi_script_name; # same
- fastcgi_param QUERY_STRING $query_string;
- fastcgi_param REQUEST_METHOD $request_method;
- fastcgi_param CONTENT_TYPE $content_type;
- fastcgi_param CONTENT_LENGTH $content_length;
- fastcgi_param SCRIPT_NAME $fastcgi_script_name;
- fastcgi_param REQUEST_URI $request_uri;
- fastcgi_param DOCUMENT_URI $document_uri;
- fastcgi_param DOCUMENT_ROOT $document_root;
- fastcgi_param SERVER_PROTOCOL $server_protocol;
- fastcgi_param GATEWAY_INTERFACE CGI/1.1;
- fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
- fastcgi_param REMOTE_ADDR $remote_addr;
- fastcgi_param REMOTE_PORT $remote_port;
- fastcgi_param SERVER_ADDR $server_addr;
- fastcgi_param SERVER_PORT $server_port;
- fastcgi_param SERVER_NAME $server_name;
- # required if PHP was built with --enable-force-cgi-redirect
- fastcgi_param REDIRECT_STATUS 200;
- }
โดยในส่วนของ SCRIPT_FILENAME นั้นให้ใส่ webroot path ที่ต้องการโดยไม่ต้องมี / ปิดท้าย
จากนั้นเขียน PHP script เพื่อทำการทดสอบ
BASH
- nano /home/administrator/public_html/index.php
โดยเรียกให้แสดงผลข้อมูลของ PHP เขียนดังนี้
PHP
- <?php
- ?>
สั่ง nginx ให้เริ่มการทำงานใหม่
BASH
- service nginx restart
ก็จะแสดงผล phpinfo ออกมาแปลว่าการติดตั้งเสร็จสมบูรณ์เรียบร้อยแล้ว