Hướng Dẫn Nginx #1: Các Khái Niệm Cơ Bản


Bài hướng dẫn này gồm có 3 phần:

  • Các khái niệm cơ bản: Tìm hiểu sự khác nhau của directive và context, mô hình kế thừa và cách mà nginx chọn các khối và vị trí máy chủ.
  • Hiệu suất: mẹo và thủ thuật về cải thiện tốc độ. Thảo luận về gzip, bộ nhớ đệm, bộ đệm và thời gian chờ.
  • Cài đặt SSL: Thiết lập cấu hình để phân phối nội dung qua HTTPS.

Các lệnh cơ bản

Để start nginx, dùng lệnh:

/etc/init.d/nginx start

Xem trạng thái của nginx:

/etc/init.d/nginx status

Tải lại file cấu hình:

/etc/init.d/nginx reload

Kiểm tra cấu trúc file cấu hình nginx:

nginx -t

Kết quả kiểm tra file cấu hình nginx:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Chỉ thị và ngữ cảnh

Mặc định file cấu hình nginx được tìm thấy trong:

  • /etc/nginx/nginx.conf
  • /etc/nginx/conf.d/default.conf
  • /etc/nginx/conf.d/*.conf

Tệp này bao gồm:

  • chỉ thị (directive): tuỳ chọn bao gồm tên và thông số, kết thúc bằng dấu “;”
    gzip on;
  • bối cảnh (context): là phần chứa các chỉ thị
    worker_processes 2; # chỉ thị trong bối cảnh toàn cục
    
    http {              # bối cảnh http
        gzip on;        # chỉ thị trong bối cảnh http
    
      server {          # bối cảnh server
        listen 80;      # chỉ thị trong bối cảnh server
      }
    }

     

Loại chỉ thị

Bạn phải chú ý khi sử dụng chỉ thị khác nhau trong nhiều bối cảnh, vì mô hình kế thừa khác với các chỉ thị khác nhau. Có 3 loại chỉ thị, mổi loại có một mô hình kế thừa của nó.

Bình thường

có một giá trị cho mổi bối cảnh. Ngoài ra, nó có thể chỉ được định nghĩa 1 lần trong bối cảnh. Bối cảnh con có thể ghi đè chỉ thị cha, nhưng ghi đè này chỉ có ý nghĩa trong bối cảnh con cung cấp.

gzip on;
gzip off; # không hợp lệ, có 2 chỉ thị bình thường trong cùng 1 bối cảnh

server {
  location /downloads {
    gzip off;
  }

  location /assets {
    # gzip được bật ở đây
  }
}

Mảng

Việc thêm nhiều chỉ thị trong cùng 1 bối cảnh sẽ thêm vào các giá trị thay vì ghi đè chúng hoàn toàn. Việc định nghĩa 1 chỉ thị trong bối cảnh con sẽ ghi đè tất cả giá trị cha trong một bối cảnh con cung cấp.

error_log /var/log/nginx/error.log;
error_log /var/log/nginx/error_notive.log notice;
error_log /var/log/nginx/error_debug.log debug;

server {
  location /downloads {
    # điều này sẽ ghi đè tất cả giá trị chỉ thị error_log ở bối cảnh cha
    error_log /var/log/nginx/error_downloads.log;
  }
}

Chỉ thị hành động

Hành động là chỉ thị thay đổi mọi thứ. Hành vi thừa kế sẽ phụ thuộc vào module.

Ví dụ, trong trường hợp của rewrite chỉ thị, mọi chỉ thị phù hợp sẽ được thực hiện:

server {
  rewrite ^ /foobar;

  location /foobar {
    rewrite ^ /foo;
    rewrite ^ /bar;
  }
}

Nếu người dùng cố gắng fetch /sample:

  • Một máy chủ rewrite được thực hiện, viết lại /sample thành /foobar
  • Vị trí /foobar được khớp
  • Vị trí rewrite đầu tiên được thực hiện, viết lại /foobar thành /foo
  • Vị trí rewrite thứ 2 được thực hiện, viết lại /foo thành /bar

Đây là một hành vi khác mà chỉ thị return được cung cấp:

server {
  location / {
    return 200;
    return 404;
  }
}

Trong trường hợp trên, status 200 được trả về ngay lập tức.

Xử lý yêu cầu

Trong nginx, bạn có thể chỉ định nhiều máy chủ ảo, mổi máy chủ ảo được mô trả bới một bối cảnh server {} 

server {
  listen      *:80 default_server;
  server_name netguru.co;

  return 200 "Hello from netguru.co";
}

server {
  listen      *:80;
  server_name foo.co;

  return 200 "Hello from foo.co";
}

server {
  listen      *:81;
  server_name bar.co;

  return 200 "Hello from bar.co";
}

còn tiếp…

Rate this post

About the Author: truongluu

Leave a Reply

Your email address will not be published. Required fields are marked *