Giới thiệu

Nginx là một máy chủ web rất nhanh, mạnh, nhẹ và hiệu suất cao, chạy ít nhất 40% các trang web bận rộn nhất trên toàn cầu. Nhờ tính linh hoạt của Nginx, nó cũng đang được sử dụng một bộ cân bằng tải, proxy ngược và máy chủ bộ đệm HTTP.


Tính năng tốt nhất của Nginx là tốc độ cho phép nó xử lý hàng ngàn kết nối đồng thời một cách dễ dàng.

Trong bài viết này, chúng tôi sẽ minh họa các cách tốt nhất để điều chỉnh và tối ưu hóa máy chủ web Nginx.

Điều kiện tiên quyết

  • Thiết lập VPS Linux (Bất kỳ hương vị Linux nào)
  • Hiểu biết cơ bản về cấu hình Nginx
  • Nginx đã cài đặt

Điều chỉnh và tối ưu hóa Nginx sẽ liên quan đến việc điều chỉnh các tham số trong tệp cấu hình Nginx mặc định /etc/nginx/nginx.conf.

Đây là tệp cấu hình Nginx mặc định mẫu /etc/nginx/nginx.conf

dữ liệu www của người dùng;
worker_ Processes auto;
pid /run/nginx.pid;
bao gồm /etc/nginx/modules-enables/*.conf;

sự kiện {
worker_connations 768;
# multi_accept trên;
}

http {

##
# Cài đặt cơ bản
##

sendfile trên;
tcp_nopush trên;
tcp_nodelay trên;
keepalive_timeout 65;
loại_hash_max_size 2048;
server_tokens tắt;
add_header X-XSS-Bảo vệ "1; chế độ = khối";
add_header X-Frame-Tùy chọn "SAMEORIGIN";

# server_names_hash_bucket_size 64;
# server_name_in_redirect tắt;

bao gồm /etc/nginx/mime.types;
ứng dụng default_type / octet-stream;

##
# Cài đặt SSL
##

ssl_prot Protocol TLSv1 TLSv1.1 TLSv1.2; # Thả SSLv3, ref: POODLE
ssl_prefer_server_ciphers trên;

##
# Cài đặt ghi nhật ký
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

##
Cài đặt # Gzip
##

gzip trên;

# gzip_vary trên;
# gzip_proxied bất kỳ;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types văn bản / văn bản thuần túy / ứng dụng css / ứng dụng json / văn bản javascript / ứng dụng xml / ứng dụng xml / xml + văn bản rss / javascript;

##
# Liên kết máy chủ ảo
##

bao gồm /etc/nginx/conf.d/*.conf;
bao gồm / etc / nginx / site-enable / *;
}

#thư {
# # Xem tập lệnh xác thực mẫu tại:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost / auth.php;
# # pop3_capabilities "HÀNG ĐẦU" "NGƯỜI DÙNG";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# người phục vụ {
# nghe localhost: 110;
# giao thức pop3;
# proxy trên;
#}
#
# người phục vụ {
# nghe localhost: 143;
# giao thức imap;
# proxy trên;
#}
#}

Sao lưu tệp cấu hình nginx hiện tại của bạn trước khi chỉnh sửa trong khi thực hiện điều chỉnh và tối ưu hóa nginx. Nó khuyên bạn nên thực hiện một thay đổi tại một thời điểm, lưu tệp cấu hình, khởi động lại máy chủ Nginx và kiểm tra hiệu suất để xem bất kỳ cải thiện nào về hiệu suất. Nếu bạn không thấy cải thiện, bạn có thể muốn trở lại giá trị ban đầu / mặc định.

1. Quy trình công nhân

Các quy trình công nhân đề cập đến số lượng công nhân được sinh ra bởi Nginx. Nó thực hành tốt nhất để chạy quy trình 1 worker trên mỗi lõi CPU. Nếu bạn đặt một giá trị nhiều hơn số lõi CPU trong máy / VPS của bạn, điều này sẽ gây ra các quá trình nhàn rỗi trong hệ thống.

Theo mặc định, giá trị process worker được đặt thành Tự động.

Để biết số lượng lõi CPU trong hệ thống của bạn, hãy chạy lệnh:

$ grep bộ xử lý / Proc / cpuinfo | wc -l
1

Trong VPS của chúng tôi, chúng tôi có 1 lõi, do đó, khuyến nghị nên đặt giá trị quy trình worker thành 1

trong tập tin cấu hình như hình dưới đây:

worker_ Processes 1;

Trong trường hợp có nhiều lưu lượng truy cập hơn vào máy chủ web nginx của bạn và yêu cầu chạy nhiều quy trình hơn, thì nó khuyên bạn nên nâng cấp máy của mình lên nhiều lõi hơn và điều chỉnh lại các quy trình worker thành số lõi CPU mới trong hệ thống của bạn.

2. Kết nối công nhân

Kết nối công nhân là số lượng máy khách có thể được phục vụ đồng thời bởi một máy chủ web Nginx. Khi kết hợp với quy trình worker, bạn sẽ có được số lượng khách hàng tối đa có thể được phục vụ mỗi giây như sau:

Số lượng khách hàng tối đa / giây = Quá trình công nhân * Kết nối công nhân

Theo mặc định, giá trị của các kết nối worker được đặt thành 768.

Tuy nhiên, cần lưu ý rằng hầu hết các lần trình duyệt mở ít nhất 2 kết nối cho mỗi máy chủ cùng một lúc, do đó, số lượng có thể bị cắt làm đôi.

Để tối đa hóa tiềm năng đầy đủ của Nginx, các kết nối worker phải được đặt thành số lượng quy trình tối đa được phép có thể được chạy bởi lõi tại một thời điểm. Điều này tương đương với số lượng mô tả tệp mở có thể thu được bằng lệnh:

$ ulimit -n
1024

Trong VPS của chúng tôi, lõi được giới hạn ở 1024 quy trình tại một thời điểm, do đó, nó khuyến nghị nên đặt giá trị của các kết nối worker (trong phần sự kiện) thành 1024 như sau:

sự kiện {
worker_connections 1024;

}

Từ tính toán của chúng tôi, số lượng khách hàng tối đa có thể được phục vụ mỗi giây là

1024 kết nối worker * 1 process worker = 1024 client mỗi giây

3. Đa chấp nhận

Đa chấp nhận định nghĩa cách quy trình worker chấp nhận các kết nối mới.

Theo mặc định, quy trình worker được đặt thành tắt và chấp nhận một kết nối mới tại một thời điểm.

Nếu nó đưa vào, quy trình công nhân chấp nhận tất cả các kết nối mới cùng một lúc. Giá trị multi_accept (trong phần sự kiện) nên được đặt thành tắt như hiển thị bên dưới:

sự kiện {
worker_connections 1024;
đa_accept tắt;
}

4. Nén Gzip

Nén các phản hồi của khách hàng Giảm kích thước của chúng do đó sử dụng ít băng thông mạng hơn và cải thiện thời gian tải trang cho các kết nối chậm. Cần lưu ý rằng chính quá trình nén sẽ tiêu tốn tài nguyên máy do đó bạn nên phân tích và đánh giá lợi ích chi phí của việc nén. Mặt khác, nén có thể làm việc bất lợi và làm giảm hiệu suất nginx. Nó khuyên bạn nên thực hiện nén như sau:

  1. Chỉ bật nội dung gzip cho nội dung phù hợp, ví dụ: CSS, văn bản, tệp JavaScript, e.t.c
  2. Kiểm tra hiệu ứng nén bằng cách bật và tắt tính năng nén cho các loại nội dung và kích cỡ khác nhau
  3. KHÔNG tăng mức nén vì chi phí này cho nỗ lực của CPU mà không tăng thông lượng tương xứng.

Mẫu cấu hình gzip được đề xuất như sau: (trong phần http)

gzip trên;
gzip_vary trên;
gzip_proxied bất kỳ;
gzip_comp_level 1;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types văn bản / văn bản thuần túy / ứng dụng css / ứng dụng json / văn bản javascript / ứng dụng xml / ứng dụng xml / xml + văn bản rss / javascript;

5. Bộ đệm

Bộ đệm đóng một vai trò lớn trong việc tối ưu hóa hiệu suất nginx. Sau đây là các biến cần được điều chỉnh để có hiệu suất tối ưu:

client_body_buffer_size – Xử lý kích thước bộ đệm của máy khách, nghĩa là các hành động POST, ví dụ: mẫu đệ trình gửi đến máy chủ web Nginx. Nó khuyên bạn nên đặt cái này thành 10K.

client_header_buffer_size – Tương tự client_body_buffer_size nhưng xử lý kích thước tiêu đề của máy khách. Nó khuyên bạn nên đặt cái này thành 1K.

client_max_body_size – Kích thước yêu cầu khách hàng tối đa được phép. Nếu vượt quá giá trị, nginx tạo ra 413 lỗi hoặc Thực thể yêu cầu quá lớn.

Large_client_header_buffers – Số lượng và kích thước bộ đệm tối đa cho các tiêu đề khách hàng lớn.

Các cài đặt được đề xuất như sau (trong phần http)

client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
lớn_client_header_buffers 4 4k;

Với các giá trị ở trên, nginx sẽ hoạt động tối ưu nhưng để tối ưu hóa hơn nữa, bạn có thể điều chỉnh các giá trị và kiểm tra hiệu suất.

6. Hết giờ

Thời gian chờ thực sự cải thiện hiệu suất nginx đáng kể. Các kết nối cố định làm giảm cpu và chi phí mạng cần thiết để mở và đóng kết nối. Sau đây là các biến cần được điều chỉnh để có hiệu suất tốt nhất:
client_header_timeout & client_body_timeout – Thời gian mà máy chủ nginx sẽ đợi tiêu đề hoặc phần thân khách được gửi sau khi yêu cầu.

keepalive_timeout – Thời lượng kết nối keepalive vẫn mở, sau đó nginx đóng kết nối máy khách.

send_timeout – Hết giờ để gửi phản hồi cho khách hàng. Nếu máy khách không nhận được phản hồi của máy chủ trong khoảng thời gian này, nginx sẽ chấm dứt kết nối.

Sau đây là các giá trị được đề xuất: (trong phần http)

client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;

7. Nhật ký truy cập

Ghi nhật ký là rất quan trọng để quản lý, xử lý sự cố và hệ thống kiểm toán. Tuy nhiên, việc ghi nhật ký và lưu trữ khối dữ liệu lớn sẽ tiêu tốn rất nhiều tài nguyên hệ thống, sử dụng nhiều chu kỳ CPU / IO hơn do đó làm giảm hiệu suất của máy chủ. để ghi nhật ký truy cập, nó ghi nhật ký mọi yêu cầu nginx do đó tiêu tốn rất nhiều tài nguyên CPU làm giảm hiệu suất nginx.

Có hai giải pháp để giải quyết vấn đề này..

  1. Vô hiệu hóa hoàn toàn Nhật ký truy cập
    access_log tắt;
  2. Nếu nó bắt buộc phải có ghi nhật ký truy cập, thì hãy kích hoạt bộ đệm nhật ký truy cập. Điều này cho phép Nginx đệm một loạt các mục nhật ký và ghi chúng vào tệp nhật ký cùng một lúc thay vì thực hiện thao tác ghi khác nhau cho mỗi mục nhật ký đơn.
    access_log /var/log/nginx/access.log bộ đệm chính = 16k

Bạn cũng có thể sử dụng các giải pháp nguồn mở để ghi nhật ký như ngăn xếp ELK và các giải pháp khác sẽ tập trung tất cả các nhật ký cho hệ thống của bạn.

Phần kết luận

Khi bạn đã có một máy chủ web nginx được tối ưu hóa, bước tiếp theo là giám sát máy chủ và điều chỉnh các cài đặt theo thời gian khi lưu lượng truy cập đến máy chủ tăng lên hoặc các yếu tố khác xuất hiện. Do đó, các giá trị được đề xuất không phải là tốt nhất cho mọi trường hợp mà chỉ trong quá trình phát triển và trong lưu lượng truy cập thấp hoặc lưu lượng trung bình đến máy chủ web. Bạn có thể tăng các giá trị của bước khôn ngoan trong khi thực hiện kiểm tra hiệu suất để kiểm tra bất kỳ cải tiến nào.

Nếu bạn không thấy cải thiện, vui lòng để mặc định giá trị. Tổng hợp các giá trị được điều chỉnh của các tham số khác nhau cải thiện hiệu năng nginx vô cùng.

Những cân nhắc khác bạn có thể thực hiện để cải thiện hiệu suất máy chủ web của mình, đặc biệt khi lưu lượng truy cập tăng lên là cân bằng tải, tự động mở rộng, tính sẵn sàng cao, đề cập đến nhưng một số ít. Nếu vẫn thất bại, hãy cân nhắc chuyển sang nhà cung cấp VPS mới với phần cứng và phần mềm tốt hơn, cập nhật hơn (cần trợ giúp? Truy cập danh sách dịch vụ lưu trữ VPS tốt nhất của HostAdvice)

Kiểm tra 3 dịch vụ VPS hàng đầu sau:

Lưu trữ A2

Giá khởi điểm:
$ 5,00


độ tin cậy
9,3


Giá cả
9.0


Thân thiện với người dùng
9,3


Ủng hộ
9,3


Đặc trưng
9,3

Đọc đánh giá

Ghé thăm Hosting A2

Scalahosting

Giá khởi điểm:
$ 12,00


độ tin cậy
9,4


Giá cả
9,5


Thân thiện với người dùng
9,5


Ủng hộ
9,5


Đặc trưng
9,4

Đọc đánh giá

Ghé thăm Scalahosting

Chủ nhà

Giá khởi điểm:
$ 3,95


độ tin cậy
9,3


Giá cả
9,3


Thân thiện với người dùng
9,4


Ủng hộ
9,4


Đặc trưng
9,2

Đọc đánh giá

Ghé thăm Hostinger

Bài viết hướng dẫn liên quan

  • Cách cài đặt WordPress với Nginx & Redis
    người mới
  • Cách cài đặt WordPress với Nginx & Redis trên VPS CentOS hoặc Máy chủ chuyên dụng
    Trung gian
  • Cách làm cứng Máy chủ web Nginx trên VPS Ubuntu 18.04 hoặc Máy chủ chuyên dụng
    chuyên gia
  • Cách cài đặt LEMP (Linux, Nginx, MySQL, PHP) trên CentOS 7 VPS hoặc Máy chủ chuyên dụng
    Trung gian
  • Cách định cấu hình Nginx và Apache cùng nhau trên cùng một Ubuntu Ubuntu hoặc Máy chủ chuyên dụng
    Trung gian
Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me