Cấu hình máy chủ HTTP trong Nginx

Trong bài trước, chúng ta đã làm quen với các cấu hình cơ bản của Nginx và cách sử dụng chúng trên từng hệ thống khác nhau. Từ bài viết này, chúng ta sẽ bắt đầu đi sâu vào tìm hiểu những chức năng chính được cung cấp bởi Nginx, bắt đầu từ chức năng đầu tiên – máy chủ HTTP, cũng như module cung cấp chức năng này – HTTP Core.

Trong loạt bài viết này, chúng ta sẽ lần lượt tìm hiểu về các vấn đề sau:

  • Giới thiệu về module HTTP Core trong Nginx.
  • Cấu trúc của các khối chỉ thị http, server, location.
  • Các chỉ thị của module HTTP Core.
  • Các biến của module HTTP Core.
  • Tìm hiểu sâu về khối chỉ thị location trong module HTTP Core.

1. Giới thiệu module HTTP Core

Module HTTP Core là thành phần chứa tất cả các khối, chỉ thị và các biến cơ bản của máy chủ HTTP. Mặc định module này được cài đặt trong khi biên dịch, nhưng không được bật lên khi Nginx chạy, việc sử dụng module này là không bắt buộc. Chúng ta có thể gỡ bỏ nó trong quá trình biên dịch chương trình (Tham khảo bài Cài đặt Nginx).

Module này là 1 trong những module tiêu chuẩn lớn nhất của Nginx – nó cung cấp 1 số lượng ấn tượng các chỉ thị và biến. Để có thể hiểu được tất cả các yếu tố mới này và vai trò của chúng, chúng ta cần hiểu tổ chức luận lý được giới thiệu trong 3 khối chỉ thị chính – http, serverlocation.

2. http, serverlocation

Ở bài trước, chúng ta đã khám phá các module cơ bản của Nginx và làm quen với khối chỉ thị đầu tiên – events. Module HTTP Core tiếp tục giới thiệu đến chúng ta 3 khối khai báo mới là:

  • http: được khai báo ở phần đầu của tập tin cấu hình. Nó cho phép chúng ta bắt đầu định nghĩa các chỉ thị và các khối từ tất cả các module liên quan đến khía cạnh HTTP của Nginx. Khối chỉ thị này có thể được khai báo nhiều lần trong tập tin cấu hình, và các giá trị chỉ thị được chèn trong khối http sau sẽ ghi đè lên các chỉ thị nằm trong khối http trước đó.
  • server: khối này cho phép chúng ta khai báo 1 website. Nói cách khác, 1 website cụ thể (được nhận diện bởi 1 hoặc nhiều hostname) được thừa nhận bới Nginx và nhận cấu hình của chính nó. Khối này chỉ có thể được dùng bên trong khối http.
  • location: cho phép chúng ta định nghĩa 1 nhóm các thiết lập được áp dụng cho 1 vị trí cụ thể trên website (thể hiện qua URL của website đó). Khối location có thể được dùng bên trong 1 khối server hoặc nằm chồng bên trong 1 khối location khác.

http_core_structureTrong biểu đồ trên, khu vực HTTP, được định nghĩa bởi khối http,  bao quanh toàn bộ các cấu hình liên quan đến web. Nó cũng chứa 1 hoặc nhiều khối server, định nghĩa các tên miền của các website mà chúng ta có. Với mỗi website này, chúng ta có thể định nghĩa nhiều khối location mà cho phép chúng ta áp dụng  các thiết lập bổ sung đến 1 URI yêu cầu cụ thể của website hoặc các URI yêu cầu khớp 1 mẫu nào đó.

Cần ghi nhớ rằng nguyên tắc kế thừa cấu hình được áp dụng ở đây. Nếu chúng ta định nghĩa 1 thiết lập tại khối http (ví dụ, gzip on để bật tính năng nén bằng gzip), thiết lập này sẽ duy trì giá trị của nó trong các khối server và location có khả năng kết hợp:

http {

# Enable gzip compression at the http block level

gzip on;

server {

server_name localhost;

listen 80;

# At this stage, gzip still set to on

location /downloads/ {

gzip off;

# This directive only applies to documents found in /downloads/

}

}

}