NGINX config – Tìm hiểu về cấu trúc file và context
maychuhnoi > 12-04-2021, 04:30 AM
NGINX là một phần mềm web server mã nguồn mở. Nó được ứng dụng trong web HTTP, reverse proxy, HTTP load balancer và email proxy. Bài viết này sẽ cung cấp những kiến thức nền tảng về NGINX config.
Giới thiệu về NGINX
NGINX (đọc là “engine-ex”), là một server web hiệu suất cao. Nó chịu trách nhiệm xử lý tải của những trang web lớn nhất trên internet. NGINX đặc biệt tốt trong việc xử lý nhiều kết nối đồng thời. Ngoài ra, nó cũng vượt trội trong việc phục vụ các nội dung tĩnh (static content).
Bên cạnh nhiều người dùng đã nhận thức được khả năng của NGINX, các newbie vẫn thường bị nhẫm lẫn trong việc sử dụng phần mềm này. Vì vậy, bài viết này sẽ tập trung vào cấu trúc cơ bản của file NGINX config. Cùng với đó là một số nguyên tắc cơ bản về cách thiết kế các file.
Tìm hiểu về context NGINX config
Hướng dẫn dưới đây sẽ bao gồm các cấu trúc cơ bản được tìm thấy trong file NGINX config chính. Vị trí của file này sẽ tùy vào cách người dùng cài đặt phần mềm trên máy. Thông thường , nó sẽ nằm ở đường dẫn /etc/nginx/nginx.conf. Nếu không, có thể file này sẽ ở /usr/local/nginx/conf/nginx.conf hay /usr/local/etc/nginx/nginx.conf.
Về tổng quan, file config chính sẽ được sắp xếp theo cấu trúc cây, xác định bởi các tập hợp hay dấu hoặc ({ }). Trong thuật ngữ NGINX, thành phần được xác định bởi các dấu ngoặc gọi là “context”. Các context này chứa thông tin chi tiết về cấu hình, được phân chia theo từng loại cụ thể. Về cơ bản, cách chia này cho ta một cấu trúc có tổ chức tốt.
Các context có thể được xếp lớp trong nhau. Vì vậy NGINX cung cấp một cấp độ directive kế thừa. Theo quy tắc chung, nếu một directive có giá trị trong nhiều phạm vi được lồng vào nhau, một khai báo trong context lớn hơn sẽ được truyền vào bất kỳ context con nào dưới dạng giá trị mặc định. Các context con sẽ ghi đè các giá trị này theo ý muốn. Nên nhớ rằng, ghi đè vào bất kỳ directive loại mảng nào sẽ thay thế giá trị trước đó, chứ không thêm vào nó.
Các directive chỉ được sử dụng trong các context được thiết kế cho nó. NGINX sẽ báo lỗi khi đọc một file config với các directive được khai báo trong một context không chính xác. Để tham khảo, tài liệu của NGINX có chứa thông tin về các context tương ứng với mỗi directive.
>>> Xem thêm: mua maychu dell t340
Các Context chính trong NGINX config
Trong nhóm đầu tiên, ta sẽ tìm hiểu về các context cốt lõi của NGINX. Nó dùng để xây dựng cấu trúc cây phân cấp (hierarchical tree) và phân tách các mặt của block config rời rạc. Chính các context này sẽ bao gồm những cấu trúc chính của NGINX config.
Main Context (Global Context)
Context khái quát nhất của NGINX config chính là main context. Đây là context duy nhất không nằm trong các khối context điển hình có dạng:
# The main context is here, outside any other contexts
. . .
context {
. . .
}
nginx
Bất kỳ directive nào tồn tại bên ngoài các khối này sẽ được cho là “main” context. Cần nhớ rằng, nếu NGINX config được cấu hình theo kiểu module, một số file sẽ chứa các lệnh tồn tại bên ngoài context. Nhưng nó sẽ được chứa trong các context khi config được kết nối lại với nhau.
Main context thể hiện một môi trường rộng nhất dành cho NGINX config. Nó được sử dụng để cấu hình các chi tiết ảnh hưởng đến toàn bộ ứng dụng ở cấp độ cơ bản. Khi các directive trong phần này ảnh hưởng những context ở cấp độ thấp hơn, một trong số chúng sẽ không được kế thừa. Sở dĩ vì các directive này không thể bị ghi đè ở các tầng thấp hơn.
Một số chi tiết phổ biến được cấu hình trong main context là người dùng và nhóm để chạy worker processess. Như số lượng worker, file để lưu PID của main process, CPU worker. File error_log mặc định của toàn bộ ứng dụng có thể được thiết lập ở cấp độ này (nó cũng có thể bị ghi đè ở các context cụ thể khác).
Event Context
Event Context là một context được chứa bên trong main context. Nó dùng để đặt các tùy chọn ở mức độ blogal, ảnh hưởng đến cách NGINX xử lý các kết nối ở cấp độ chung. Trong NGINX config, chỉ có một event context duy nhất được xác định.
Event context ở trong file config sẽ có dạng sau:
# main context
events {
# events context
. . .
}
nginx
NGINX sử dụng mô hình xử lý kết nối dựa trên các event. Do đó, các directive được xác định trong context này sẽ xác định cách worker processes ở trên xử lý các kết nối. Chủ yếu, các directive được tìm thấy ở đây được sử dụng để chọn ra kỹ thuật xử lý kết nối để sử dụng. Hoặc là sửa đổi cách các phương thức được triển khai.
Thông thường, phương thức xử lý kết nối được chọn tự động, dựa trên sự lựa chọn tối ưu mà nền tảng có sẵn. Đối với các hệ thống của Linux, sự lựa chọn tốt nhất thường là epoll.
Các mục khác có thể được cấu hình là số lượng kết nối mỗi worker có thể xử lý. Hay quyết định mỗi worker chỉ đảm nhận 1 kết nối hay tất cả kết nối đang chờ cùng lúc. Và quyết định xem các worker có thay phiên nhau respond các event không.
>>> Xem thêm: mua server dell t140
HTTP Context
Khi cấu hình NGINX như một web server hay một reverse proxy, http context sẽ chiếm phần lớn cấu hình. Context này sẽ chứa mọi directive cũng như các context cần thiết khác để xác định cách các chương trình xử lý kết nối HTTP hay HTTPS.
HTTP context thực ra tương đương với event context, nên chúng sẽ được liệt kê cạnh nhau, thay vì lồng vào nhau. Cả hai đều là context con của main context:
# main context
events {
# events context
. . .
}
http {
# http context
. . .
}
nginx
Các context thấp hơn sẽ cụ thể hơn về cách xử lý request. Nhưng các directive ở cấp độ này sẽ kiểm soát mặc định cho mỗi máy chủ ảo được xác định trong nó. Một lượng lớn các directive có thể được cấu hình theo context này và những context thấp hơn. Việc này tùy thuộc cách người dùng xác định quyền thừa kế.
Một số directive thường gặp kiểm soát location mặc định cho các truy cập và nhật ký lỗi (access_log và error_log). Nó cũng cấu hình I/O không đồng bộ cho các hoạt động của file (aio, sendfile, directio). Cấu hình trạng thái server khi xảy ra lỗi (error_page). Một số directive khác cấu hình nén (gzip, gzip_disable), fine-tune cài đặt keep alive TCP (keepalive_disable, keepalive_requests, keepalive_timeout). Hoặc cấu hình các quy tắc mà NGINX sẽ theo để tối ưu hóa các packet và system call (sendfile, tcp_nodelay, tcp_nopush). Các directive bổ sung cấu hình root các tài liệu tầng ứng dụng và index file (root, index). Nó cũng thiết lập các hash table dùng để chứa nhiều loại dữ liệu khác nhau (*_hash_bucket_size và *_hash_max_size cho server_names, types, variables).
Server Context
Server Context được khai báo trong http context. Đây cũng là một ví dụ về các context lồng nhau. Server context cũng là context đầu tiên cho phép khai báo nhiều lần.
Định dạng chung của server context có dạng như sau:
# main context
http {
# http context
server {
# first server context
}
server {
# second server context
}
}
nginx
Trong context này, mỗi trường hợp sẽ xác định một virtual server cụ thể để xử lý yêu cầu của client. Do đó, server context cho phép khai báo nhiều lần. Ta có thể có bao nhiêu server block tùy ý. Mỗi block có thể xử lý một subnet cụ thể.
>>> Xem thêm: bán server dell t30