ติดตั้ง Nginx ใน CentOS จาก Source เขียนเมื่อ 2009.07.03 โดย

Nginx เป็น http server ที่ปัจจุบันได้ชื่อว่าเร็วและเล็กที่สุด (ใน Modoeye Article นี้ก็ใช้อยู่ด้วย) และกำลังเป็นที่นิยมเพิ่มขึ้นเรื่อยๆ เพื่อไม่ให้ตกเทรนด์ลองเล่นกันเลย โดยเราจะให้ php ทำงานในรูปแบบ fast-cgi การติดตั้ง php ในแบบ cgi อ่านได้ที่ ติดตั้ง php แบบ fast-cgi

ในการทำงานแบบ fast-cgi นี้จำเป็นต้องมีตัวทำการแตก (spawn) การทำงานออกไปด้วย ซึ่งในที่นี้ใช้ spawn-fcgi ที่ยืมมาจาก lighttpd อีกที เริ่ม download กันเลย
BASH
  1. wget http://www.lighttpd.net/download/spawn-fcgi-1.6.2.tar.gz

แตกไฟล์
BASH
  1. tar xzf spawn-fcgi-1.6.2.tar.gz

เปลี่ยน Directory ทำงาน
BASH
  1. cd spawn-fcgi-1.6.2

เริ่มทำการ Configure
BASH
  1. ./configure

จากนั้นก็ทำการ compile
BASH
  1. make

เสร็จแล้วก็จะได้ binary ของ spawn-fcgi ซึ่งจะอยู่ใน ./src ทำการ copy ไปไว้ใน /usr/bin
BASH
  1. cp ./src/spawn-fcgi /usr/bin/spawn-fcgi

ืทำการเขียน init script เพื่อให้ทำงานในแบบของ service ได้
BASH
  1. nano /etc/init.d/spawn-fcgi

โดยมีคำสั่งดังข้างล่าง
TEXT
  1. #!/bin/sh
  2. #
  3. # php-cgi - php-fastcgi swaping via  spawn-fcgi
  4. #
  5. # chkconfig:   - 85 15
  6. # description:  Run php-cgi as app server
  7. # processname: php-cgi
  8. # config:      /etc/sysconfig/phpfastcgi (defaults RH style)
  9. # pidfile:     /var/run/php_cgi.pid
  10. # Note: See how to use this script :
  11. # http://www.cyberciti.biz/faq/rhel-fedora-install-configure-nginx-php5/
  12. # Source function library.
  13. . /etc/rc.d/init.d/functions
  14.  
  15. # Source networking configuration.
  16. . /etc/sysconfig/network
  17.  
  18. # Check that networking is up.
  19. [ "$NETWORKING" = "no" ] && exit 0
  20.  
  21. spawnfcgi="/usr/bin/spawn-fcgi"
  22. php_cgi="/usr/local/bin/php-cgi"
  23. prog=$(basename $php_cgi)
  24. server_ip=127.0.0.1
  25. server_port=9000
  26. server_user=nginx
  27. server_group=nginx
  28. server_childs=5
  29. pidfile="/var/run/php_cgi.pid"
  30.  
  31. # do not edit, put changes in /etc/sysconfig/phpfastcgi
  32. [ -f /etc/sysconfig/phpfastcgi ] && . /etc/sysconfig/phpfastcgi
  33.  
  34. start() {
  35.     [ -x $php_cgi ] || exit 1
  36.     [ -x $spawnfcgi ] || exit 2
  37.     echo -n $"Starting $prog: "
  38.     daemon $spawnfcgi -a ${server_ip} -p ${server_port} -u ${server_user} -g ${server_group} -P ${pidfile} -C ${server_childs} -f ${php_cgi}
  39.     retval=$?
  40.     echo
  41.     return $retval
  42. }
  43.  
  44. stop() {
  45.     echo -n $"Stopping $prog: "
  46.     killproc -p ${pidfile} $prog -QUIT
  47.     retval=$?
  48.     echo
  49.     [ -f ${pidfile} ] && /bin/rm -f ${pidfile}
  50.     return $retval
  51. }
  52.  
  53. restart(){
  54.         stop
  55.         sleep 2
  56.         start
  57. }
  58.  
  59. rh_status(){
  60.         status -p ${pidfile} $prog
  61. }
  62.  
  63. case "$1" in
  64.     start)
  65.         start;;
  66.     stop)
  67.         stop;;
  68.     restart)
  69.         restart;;
  70.     status)
  71.         rh_status;;
  72.     *)
  73.         echo $"Usage: $0 {start|stop|restart|status}"
  74.         exit 3
  75. esac

จากนั้นทำการเพิ่ม permission ให้สามารถ execute ได้
BASH
  1. chmod +x /etc/init.d/spawn-fcgi

สั่งให้เริ่มต้นเมื่อ boot เครื่อง
BASH
  1. chkconfig spawn-fcgi on

ตอนนี้ spawn-fcgi จะทำงานอยู่ที่ port 900 ตามที่ระบุใน init script

ต่อไปเริ่มการติดตั้ง Nginx ด้วยการ download Nginx
BASH
  1. wget http://sysoev.ru/nginx/nginx-0.8.4.tar.gz

สร้าง user และ group สำหรับ nginx
BASH
  1. groupadd nginx
  2. useradd -g nginx nginx

แตกไฟล์
BASH
  1. tar xzf nginx-0.8.4.tar.gz

เปลี่ยน Directory
BASH
  1. cd nginx-0.8.4

เริ่มการ configure
BASH
  1. ./configure

ในที่นี้ต้องการเพียง standard module เท่านั้นถ้าต้องการ module อะไรเพิ่มให้ใส่ต่อท้ายได้เลย ส่วนถ้าต้องการดูว่ามี module อะไรบ้างให้ใช้คำสั่ง
BASH
  1. ./configure --help

เสร็จแล้วก็ทำการ compile
BASH
  1. make

แล้วก็ติดตั้ง
BASH
  1. make install

Nginx ที่ถูกติดตั้งจะอยู่ใน /usr/local/nginx จากนั้นทำการเขียน init script ไปไว้ที่ /etc/init.d เพื่อให้ทำงานในแบบ service ด้วย
BASH
  1. nano /etc/init.d/nginx


โดยมีคำสั่งดังข้างล่าง
TEXT
  1. #!/bin/sh
  2. #
  3. # nginx - this script starts and stops the nginx daemin
  4. #
  5. # chkconfig:   - 85 15
  6. # description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
  7. #               proxy and IMAP/POP3 proxy server
  8. # processname: nginx
  9. # config:      /usr/local/nginx/conf/nginx.conf
  10. # pidfile:     /usr/local/nginx/logs/nginx.pid
  11.  
  12. # Source function library.
  13. . /etc/rc.d/init.d/functions
  14.  
  15. # Source networking configuration.
  16. . /etc/sysconfig/network
  17.  
  18. # Check that networking is up.
  19. [ "$NETWORKING" = "no" ] && exit 0
  20.  
  21. nginx="/usr/local/nginx/sbin/nginx"
  22. prog=$(basename $nginx)
  23.  
  24. NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
  25.  
  26. lockfile=/var/lock/subsys/nginx
  27.  
  28. start() {
  29.     [ -x $nginx ] || exit 5
  30.     [ -f $NGINX_CONF_FILE ] || exit 6
  31.     echo -n $"Starting $prog: "
  32.     daemon $nginx -c $NGINX_CONF_FILE
  33.     retval=$?
  34.     echo
  35.     [ $retval -eq 0 ] && touch $lockfile
  36.     return $retval
  37. }
  38.  
  39. stop() {
  40.     echo -n $"Stopping $prog: "
  41.     killproc $prog -QUIT
  42.     retval=$?
  43.     echo
  44.     [ $retval -eq 0 ] && rm -f $lockfile
  45.     return $retval
  46. }
  47.  
  48. restart() {
  49.     configtest || return $?
  50.     stop
  51.     start
  52. }
  53.  
  54. reload() {
  55.     configtest || return $?
  56.     echo -n $"Reloading $prog: "
  57.     killproc $nginx -HUP
  58.     RETVAL=$?
  59.     echo
  60. }
  61.  
  62. force_reload() {
  63.     restart
  64. }
  65.  
  66. configtest() {
  67.   $nginx -t -c $NGINX_CONF_FILE
  68. }
  69.  
  70. rh_status() {
  71.     status $prog
  72. }
  73.  
  74. rh_status_q() {
  75.     rh_status >/dev/null 2>&1
  76. }
  77.  
  78. case "$1" in
  79.     start)
  80.         rh_status_q && exit 0
  81.         $1
  82.         ;;
  83.     stop)
  84.         rh_status_q || exit 0
  85.         $1
  86.         ;;
  87.     restart|configtest)
  88.         $1
  89.         ;;
  90.     reload)
  91.         rh_status_q || exit 7
  92.         $1
  93.         ;;
  94.     force-reload)
  95.         force_reload
  96.         ;;
  97.     status)
  98.         rh_status
  99.         ;;
  100.     condrestart|try-restart)
  101.         rh_status_q || exit 0
  102.             ;;
  103.     *)
  104.         echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
  105.         exit 2
  106. esac

เพิ่ม permission ในให้ execute ได้
BASH
  1. chmod +x /etc/init.d/nginx

สั่งให้เริ่มทำงานหลังการ boot
BASH
  1. chkconfig nginx on

ตอนนี้ nginx พร้อมทำงานแล้วสามารถทดลองได้ด้วย
BASH
  1. service nginx start

จากนั้นลองเรียกใช้งานผ่าน ip address ดูจะพบคำว่า

Welcome to nginx!

ทีนี้เหลือแต่ให้ nginx รองรับการทำงาน php แบบ fast-cgi เท่านั้น โดยแก้ไขไฟล์ configuration ของ nginx ซึ่งอยู่ใน /usr/local/nginx/conf/nginx.conf
BASH
  1. nano /usr/local/nginx/conf/nginx.conf

ตั้งค่าให้ nginx ทำงานในด้วยสิทธิ์ของ nginx ที่ส่วนบนของไฟล์ให้ un-comment ในส่วนของ user แล้วใส่ดังข้างล่าง
TEXT
  1. user nginx nginx

ในส่วนของ location / ให้ใส่ wwwroot ของเว็บไซท์จะได้


จะมีส่วนตัวอย่างที่ comment เอาไว้ภายใต้ server ใส่
TEXT
  1. location ~ \.php$ {
  2.         fastcgi_pass   localhost:9000;  # port where FastCGI processes were spawned
  3.         fastcgi_index  index.php;
  4.         fastcgi_param  SCRIPT_FILENAME    /home/administrator/public_html$fastcgi_script_name;  # same
  5.  
  6.         fastcgi_param  QUERY_STRING       $query_string;
  7.         fastcgi_param  REQUEST_METHOD     $request_method;
  8.         fastcgi_param  CONTENT_TYPE       $content_type;
  9.         fastcgi_param  CONTENT_LENGTH     $content_length;
  10.  
  11.         fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
  12.         fastcgi_param  REQUEST_URI        $request_uri;
  13.         fastcgi_param  DOCUMENT_URI       $document_uri;
  14.         fastcgi_param  DOCUMENT_ROOT      $document_root;
  15.         fastcgi_param  SERVER_PROTOCOL    $server_protocol;
  16.  
  17.         fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
  18.         fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
  19.  
  20.         fastcgi_param  REMOTE_ADDR        $remote_addr;
  21.         fastcgi_param  REMOTE_PORT        $remote_port;
  22.         fastcgi_param  SERVER_ADDR        $server_addr;
  23.         fastcgi_param  SERVER_PORT        $server_port;
  24.         fastcgi_param  SERVER_NAME        $server_name;
  25.  
  26.         # required if PHP was built with --enable-force-cgi-redirect
  27.         fastcgi_param  REDIRECT_STATUS    200;
  28.     }

โดยในส่วนของ SCRIPT_FILENAME นั้นให้ใส่ webroot path ที่ต้องการโดยไม่ต้องมี / ปิดท้าย
จากนั้นเขียน PHP script เพื่อทำการทดสอบ
BASH
  1. nano /home/administrator/public_html/index.php


โดยเรียกให้แสดงผลข้อมูลของ PHP เขียนดังนี้
PHP
  1. <?php
  2. ?>

สั่ง nginx ให้เริ่มการทำงานใหม่
BASH
  1. service nginx restart

ก็จะแสดงผล phpinfo ออกมาแปลว่าการติดตั้งเสร็จสมบูรณ์เรียบร้อยแล้ว



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