การติดตั้ง nginx 1.11.12 จาก source

1
2030

หลายๆ คนคงได้ยิน web server ที่ชื่อ nginx มาสักพักแล้ว แต่ยังไม่เคยได้ลองใช้งานกัน จากสถิติที่ผ่านมาไม่กี่ปี nginx กลายเป็น web server software ที่เป็นที่นิยมขึ้นมาเป็นอันดับสอง รองจาก apache อย่างรวดเร็ว จากภาพที่ผมได้แสดงให้เห็นข้างล่างนี้

 

 

 

 

 

 

 

 

ที่มา: https://trends.builtwith.com/web-server

จากรูปจะเห็นได้ว่า apache มีการใช้งานเป็นอันดับ 1 คิดเป็น 30% รองลงมา nginx คิดเป็น 28% ส่วนอันดับที่  3 คือ IIS ของค่าย microsoft คิดเป็น 15%
ทำให้เป็นที่น่าสนใจว่าต้องมี features อะไรหลายๆ อย่างที่ดีแน่ๆ วันนี้ผมมีโอกาสมาแนะนำการติดตั้ง nginx + php-fpm เพื่อแทนที่ apache + php_modules กันครับ ในบทความนี้ ผมจะแนะนำจากการติดตั้ง nginx ก่อนนะครับ

ดาวโหลด sources nginx จากที่นี่ครับ http://nginx.org/download/nginx-1.11.10.tar.gz

โดยส่วนใหญ่ผมจะ download sources ไปไว้ที่ /usr/src โดยใช้คำสั่งดังนี้
$cd /usr/src
$wget http://nginx.org/download/nginx-1.11.12.tar.gz

เมื่อดาวโหลดเสร็จเรียบร้อยจึง extract source files ออกมาโดยใช้คำสั่ง
$tar zxvf nginx-1.11.12.tar.gz

เริ่มต้นเรามาสร้าง script compile nginx ก่อนครับ ซึ่งท่านสามารถเลือก option ให้เข้ากับการใช้งานของท่านได้ โดยสามารถดู option ในการ compile โดยใช้คำสั่ง
$./configure –help

เรามาสร้าง script ในการ compile nginx บน linux amd64 กันได้เลยครับ

$cd nginx-1.11.10
$nano go-nginx.sh
./configure –prefix=/etc/nginx \
–with-cc-opt=”-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong –param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic” \
–with-cc-opt=”-D FD_SETSIZE=2048″ \
–sbin-path=/usr/sbin/nginx \
–conf-path=/etc/nginx/nginx.conf \
–error-log-path=/var/log/nginx/error.log \
–http-log-path=/var/log/nginx/access.log \
–pid-path=/var/run/nginx.pid \
–lock-path=/var/run/nginx.lock \
–http-client-body-temp-path=/var/lib/nginx/body \
–http-proxy-temp-path=/var/lib/nginx/proxy \
–http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
–http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
–http-scgi-temp-path=/var/lib/nginx/scgi \
–user=nginx \
–group=nginx \
–with-cpu-opt=amd64 \
–with-ld-opt=”-lrt” \
–with-http_v2_module \
–with-file-aio \
–with-http_gunzip_module \
–with-http_gzip_static_module \
–with-http_stub_status_module \
–without-mail_pop3_module \
–without-mail_smtp_module \
–without-mail_imap_module \
–lock-path=/var/lock/nginx.lock \
–pid-path=/run/nginx.pid \
–http-client-body-temp-path=/var/lib/nginx/body \
–http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
–http-proxy-temp-path=/var/lib/nginx/proxy \
–http-scgi-temp-path=/var/lib/nginx/scgi \
–http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
–with-pcre-jit \
–with-http_stub_status_module \
–with-http_realip_module \
–with-http_auth_request_module \
–with-http_addition_module \
–with-http_geoip_module \

# proc for building faster
NB_PROC=$(grep -c ^processor /proc/cpuinfo)
make -j $NB_PROC && make install

หลังจากนั้นสร้าง script เสร็จเพื่อให้ script สามารถ execute ได้จึงสั่ง
$chmod 755 go-nginx.sh
$./go-nginx.sh

รอจนกว่า nginx จะ compile เสร็จเรียบร้อย และไม่มี error message ในการ compile เป็นอันว่าเรียบร้อย
หลังจากนั้นให้สร้าง script ใน /etc/init.d/ ชื่อว่า nginx เพื่อเป็นสั่ง start daemon nginx โดยอัตโนมัติ
เมื่อเวลา reboot เครื่องหรือใช้ในการจัดการ daemon ของ nginx
$cd /etc/init.d
$nano nginx

แล้วทำการ paste script ข้างล่างนี้ลงไปครับ

#!/bin/sh

### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx web server
# Description: starts nginx using start-stop-daemon
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/nginx
NAME=nginx
DESC=nginx

# Include nginx defaults if available
if [ -f /etc/default/nginx ]; then
. /etc/default/nginx
fi

test -x $DAEMON || exit 0

set -e

. /lib/lsb/init-functions

test_nginx_config() {
if $DAEMON -t $DAEMON_OPTS >/dev/null 2>&1; then
return 0
else
$DAEMON -t $DAEMON_OPTS
return $?
fi
}

case “$1” in
start)
echo -n “Starting $DESC: ”
test_nginx_config
# Check if the ULIMIT is set in /etc/default/nginx
if [ -n “$ULIMIT” ]; then
# Set the ulimits
ulimit $ULIMIT
fi
start-stop-daemon –start –quiet –pidfile /var/run/$NAME.pid \
–exec $DAEMON — $DAEMON_OPTS || true
echo “$NAME.”
;;

stop)
echo -n “Stopping $DESC: ”
start-stop-daemon –stop –quiet –pidfile /var/run/$NAME.pid \
–exec $DAEMON || true
echo “$NAME.”
;;

restart|force-reload)
echo -n “Restarting $DESC: ”
start-stop-daemon –stop –quiet –pidfile \
/var/run/$NAME.pid –exec $DAEMON || true
sleep 1
test_nginx_config
# Check if the ULIMIT is set in /etc/default/nginx
if [ -n “$ULIMIT” ]; then
# Set the ulimits
ulimit $ULIMIT
fi
start-stop-daemon –start –quiet –pidfile \
/var/run/$NAME.pid –exec $DAEMON — $DAEMON_OPTS || true
echo “$NAME.”
;;

reload)
echo -n “Reloading $DESC configuration: ”
test_nginx_config
start-stop-daemon –stop –signal HUP –quiet –pidfile /var/run/$NAME.pid \
–exec $DAEMON || true
echo “$NAME.”
;;

configtest|testconfig)
echo -n “Testing $DESC configuration: ”
if test_nginx_config; then
echo “$NAME.”
else
exit $?
fi
;;

status)
status_of_proc -p /var/run/$NAME.pid “$DAEMON” nginx && exit 0 || exit $?
;;
*)
echo “Usage: $NAME {start|stop|restart|reload|force-reload|status|configtest}” >&2
exit 1
;;
esac

exit 0

เสร็จแล้วให้ save file  และรันคำสั่งเพื่อให้ระบบ start daemon อัตโนมัติเวลาระบบ restart ขึ้นมาใหม่ โดยใช้คำสั่ง

$cd /etc/init.d
$update-rc.d nginx defaults

เป็นอันว่าเสร็จสิ้นการลง nginx ส่วนการนำ nginx ไปใช้อย่างไร ผมขอมาเขียนในบทความต่อไปนะครับ
ขอทิ้งท้ายการจัดการ nginx process โดยใช้ shell script ข้างบนที่ผ่าน

Usage: /etc/init.d/nginx {start|stop|restart|reload|force-reload|status|configtest}
start เพื่อจะให้ process nginx เริ่มทำงาน
stop สั่งให้ process nginx หยุดทำงานทั้งหมด
restart สั่งให้ process nginx หยุดและเริ่มทำงานใหม่ อาจจะมีผลต่อ service ที่ให้บริการอยู่
reload สั่งให้ nginx โหลด config ใหม่ที่เราได้ทำการ config เข้าไปเพื่อใช้งานในกรณี reload ไม่ผ่าน จะไม่มีผลกระทบกับ process nginx
force-reload ในการที่เราสั่ง reload แล้ว config ใหม่ไม่มีผลต่อการทำงานให้ลองสั่ง force-reload ดูครับ
status เพื่อดูสถานะการทำงานของ nginx
configtest เป็นคำสั่งทดสอบ config ที่เรา config เสร็จแล้วว่ามี syntax ผิดพลาดตรงไหนหรือเปล่าครับ

1 ความคิดเห็น

ทิ้งคำตอบไว้

Please enter your comment!
Please enter your name here