0
0
Lập trình
Thaycacac
Thaycacac thaycacac

Hướng Dẫn Tối Ưu Hiệu Suất Nginx Để Đạt Được Hiệu Quả Tối Đa

Đăng vào 3 tuần trước

• 2 phút đọc

Giới Thiệu

Trong bài viết này, mình sẽ chia sẻ những kinh nghiệm quý báu về cách tối ưu cấu hình Nginx để đạt được hiệu suất tốt nhất. Gần đây, mình đã giúp một đối tác gặp sự cố với Nginx khi họ đang dùng phiên bản mặc định dẫn đến lỗi 5xx liên tục. Họ sử dụng Nginx trong một môi trường cluster ECS trên AWS, và vấn đề nằm ở logging thông báo 512 worker_connections are not enough while connecting to upstream.... Sau khi tìm nguyên nhân, mình đã tìm ra cách xử lý đơn giản nhưng hiệu quả.

Để giúp mọi người không mắc phải lỗi tương tự, mình đã tạo một repo chứa các best practice cho cấu hình Nginx, mọi người có thể tham khảo tại: GitHub - nginx-best-practice-configuration.

Phần 1: Cấu Hình Event Block

Đóng Gói Kết Nối

nginx Copy
worker_connections 4096;

Thông thường, nhiều người không chỉ định giá trị cho worker_connections trong cấu hình, dẫn đến việc Nginx chỉ sử dụng giá trị mặc định là 512. Điều này cho thấy rằng mỗi process (vCPU) của Nginx chỉ có thể xử lý tối đa 512 kết nối đồng thời. Tùy vào lượng truy cập và khả năng CPU, bạn nên điều chỉnh con số này, có thể lên đến hàng chục nghìn nếu server của bạn đủ mạnh để làm reverse proxy cho nhiều website.

Chọn Phương Pháp Xử Lý Sự Kiện

nginx Copy
use epoll;

Chỉ thị này cho phép Nginx sử dụng epoll, một phương pháp hiệu suất cao trên Linux 2.6 và các phiên bản mới hơn. Epoll sẽ giúp xử lý hiệu quả hơn so với các phương pháp như select và poll, đặc biệt khi chịu tải lớn với nhiều kết nối.

Chỉ Định Multi Accept

nginx Copy
multi_accept on;

Bằng cách bật chế độ này, mỗi worker process sẽ chấp nhận tất cả kết nối mới cùng một lúc, thay vì chấp nhận từng kết nối một. Điều này sẽ giúp giảm độ trễ trong trường hợp có nhiều kết nối đến.

Phần 2: Nén Dữ Liệu - Compression

Bật Tính Năng Nén Gzip

nginx Copy
gzip on;
gzip_static on;

Cấu Hình Nén Cho Các Phiên Bản HTTP

nginx Copy
gzip_http_version 1.1;

Thiết Lập Mức Độ Nén

Mức độ nén từ 1 đến 9, với 5 là sự cân bằng tốt nhất giữa kích thước tệp và mức sử dụng CPU, đảm bảo khoảng 75% giảm kích thước cho hầu hết các tệp ASCII:

nginx Copy
gzip_comp_level 5;

Chỉ Nén Những Tệp Có Kích Thước Lớn Hơn

nginx Copy
gzip_min_length 256;

Chỉ nén khi kích thước tệp lớn hơn 256 byte để tránh làm tăng kích thước tệp được nén.

Nén Dữ Liệu Qua Proxy

nginx Copy
gzip_proxied any;

Bật tính năng nén cho các kết nối thông qua proxy, cần thiết cho các dịch vụ như CloudFront.

Đảm Bảo Tương Thích Với Client

nginx Copy
gzip_vary on;

Giúp proxy lưu trữ cả phiên bản đã nén và không nén để đảm bảo client không có khả năng gzip vẫn có thể nhận đúng dữ liệu.

Danh Sách Các MIME-Types Được Nén

nginx Copy
gzip_types
application/atom+xml
application/javascript
application/json
application/rss+xml
application/vnd.ms-fontobject
application/x-font-ttf
application/x-web-app-manifest+json
application/xhtml+xml
application/xml
font/opentype
image/svg+xml
image/x-icon
type/css
type/plain
type/x-component;

To be continued... Chúng tôi sẽ tiếp tục cập nhật thêm thông tin trong repo trên GitHub.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào