Cấu hình nginx cơ bản - Phần 1
nginx
14
webserver
3
Male avatar

manhdung viết ngày 27/05/2015

Hiện tại tôi vừa có một quãng thời gian tìm hiểu về nginx. Do cũng chưa làm việc trên các web server khác như apache hay IIS nên tôi chưa có những so sánh đánh giá giữa các loại :D Loạt bài này xem như hướng dẫn từ A-Z cho người mới bắt đầu. Hi vọng bài viết sẽ giúp các bạn đi qua nhanh những trở ngại mà tôi đã gặp.

Các vấn đề sẽ giải quyết

Trong khuôn khổ bài viết này, tôi sẽ đi vào các chủ đề sau.

  • Biên dich cài đặt nginx
  • Tạo init script
  • Tạo một vhost
  • Cấu hình để nginx xử lý php
  • Phân quyền thư mục website
  • Cấu hình basic authention
  • Giới hạn truy cập theo IP
  • Hỗ trợ SSL
  • Biến đổi nginx hỗ trợ load balancing
  • Biến đổi nginx thành caching proxy
  • Xác định nguồn gốc địa lý của http request

Biên dịch và cài đặt nginx

Tính đến thời điểm viết bài này thì nginx đã release ra version 1.8.0
Trong trang download của nginx có hai nhánh: stable và mainline. Mainline là nhánh cho phát triển. Ở đây tôi lựa chọn nhánh stable phù hợp với các sản phẩm chạy trên product server

wget http://nginx.org/download/nginx-1.8.0.tar.gz
tar xvzf nginx-1.8.0.tar.gz
cd nginx-1.8.0

Chuẩn bị một số package phục vụ cho việc biên dịch nginx:
yum install make gcc gcc-c++ pcre-devel zlib-devel openssl-devel

Tiến hành biên dịch:
./configure --with-http_ssl_module \
--with-pcre \
--with-file-aio \
--with-http_stub_status_module \
--with-http_realip_module \
--with-http_gzip_static_module
make
make install

http_ssl_module hỗ trợ https
pcre hỗ trợ regular expression matching
file aio hỗ trợ input/output bất đồng bộ
realip_module hỗ trợ lấy real ip của origin server nằm đằng sau proxy
gzip_static_module hỗ trợ nén data trả về cho những client có hỗ trợ gzip.

Tạo init script

Chuẩn bị một file config:
/etc/sysconfig/nginx

# Configuration file for the nginx service.

NGINX=/usr/local/nginx/sbin/nginx
CONFFILE=/usr/local/nginx/conf/nginx.conf

Init script có nội dung như sau:

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15 
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/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

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

nginx=${NGINX}
prog=$(basename $nginx)
NGINX_CONF_FILE=${CONFFILE}
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
    sleep 1
    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

Sau đó tôi gán quyền execute cho init script
chmod u+x /etc/init.d/nginx

Chuẩn bị một user nginx
useradd -d /dev/null -c "nginx user" -s /sbin/nologin nginx

Trong trường hợp cài đặt nginx từ các bản pre build trên repository thì tôi đã có sẵn các init script này rồi.

Kết thúc phần cài đặt. Trong loạt bài phần 2 tôi sẽ giới thiệu cách cấu hình vhost và sử dụng php-fpm đễ vhost xử lý được file php.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

Male avatar

manhdung

44 bài viết.
221 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
Male avatar
60 11
Giới thiệu RabbitMQ là một message broker ( messageoriented middleware) sử dụng giao thức AMQP Advanced Message Queue Protocol (Đây là giao thức ph...
manhdung viết hơn 2 năm trước
60 11
Male avatar
45 4
Giả định bạn tiếp nhận một server mới toanh, bạn cần tìm một số thông tin về nó như loại CPU, loại main, loại memory, memory dùng của hãng nào... c...
manhdung viết 1 năm trước
45 4
Male avatar
38 7
Giới thiệu MongoDB là một giải pháp nosql database. Data được lưu ở dạng các bson document. Hỗ trợ vertical scaling và horizontal scaling, dynamic...
manhdung viết hơn 2 năm trước
38 7
Bài viết liên quan
White
3 2
(Ảnh) (Link) là gì ? Ampps là 1 local webserver được cài trên máy tính, cũng như các webserver khác (Lamp, Wamp, ...) , Ampp được tích hợp Apache...
Tùng Cu viết hơn 2 năm trước
3 2
Male avatar
22 12
Vẫn theo khung sườn đã định trước từ phần 1, trong phần này tôi sẽ giới thiệu cách cấu hình nginx để thực hiện vai trò của một load balancer. Trư...
manhdung viết hơn 2 năm trước
22 12
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


Male avatar
{{userFollowed ? 'Following' : 'Follow'}}
44 bài viết.
221 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!