Thứ năm, 26/03/2020 | 00:00 GMT+7

Cách tối ưu hóa cấu hình Nginx

Nginx là một giải pháp thay thế nhanh và nhẹ cho Apache 2. Tuy nhiên, Nginx cũng giống như bất kỳ loại server hoặc phần mềm nào phải được điều chỉnh để giúp đạt được hiệu suất tối ưu.

Nginx

Yêu cầu

Quy trình công nhân và kết nối công nhân

Hai biến đầu tiên ta cần điều chỉnh là các quy trình của worker và các kết nối của worker. Trước khi chuyển sang từng cài đặt, ta cần hiểu mỗi lệnh này kiểm soát những gì. Chỉ thị worker_processes là cột sống vững chắc cho Nginx. Chỉ thị này có trách nhiệm cho server ảo của ta biết có bao nhiêu công nhân sẽ sinh ra sau khi nó bị ràng buộc với (các) cổng và IP thích hợp. Thực tế phổ biến là chạy 1 quy trình công nhân cho mỗi lõi. Bất cứ điều gì ở trên này sẽ không làm tổn hại đến hệ thống của bạn, nhưng nó sẽ khiến các quá trình nhàn rỗi thường chỉ nằm ở chỗ.

Để tìm ra con số bạn cần đặt worker_processes , chỉ cần xem xét số lượng lõi bạn có trong cài đặt của bạn . Nếu bạn đang sử dụng cài đặt DigitalOcean 512MB, thì có thể nó sẽ là một lõi. Nếu bạn thay đổi nhanh kích thước thành một cài đặt lớn hơn, thì bạn cần phải kiểm tra lại các lõi của bạn và điều chỉnh con số này cho phù hợp. Ta có thể thực hiện điều này bằng cách xóa cpuinfo:

grep processor /proc/cpuinfo | wc -l 

Giả sử điều này trả về giá trị là 1. Sau đó, đó là số lượng lõi trên máy của ta !

Lệnh worker_connections cho nhân viên của ta biết số lượng người có thể được phục vụ đồng thời bởi Nginx. Giá trị mặc định là 768; tuy nhiên, khi mọi trình duyệt thường mở ít nhất 2 kết nối / server , con số này có thể bằng một nửa. Đây là lý do tại sao ta cần điều chỉnh các kết nối nhân viên của bạn để phát huy hết tiềm năng của nó. Ta có thể kiểm tra các giới hạn của lõi của ta bằng cách phát hành một lệnh ulimit:

ulimit -n 

Trên một máy nhỏ hơn ( server 512MB), con số này có thể sẽ là 1024, đây là một con số khởi đầu tốt.

Hãy cập nhật cấu hình của ta :

sudo nano /etc/nginx/nginx.conf

worker_processes 1; worker_connections 1024; 

Lưu ý , số lượng khách hàng có thể được phục vụ có thể được nhân với số lượng lõi. Trong trường hợp này, ta có thể phục vụ 1024 client / giây. Tuy nhiên, điều này thậm chí còn được giảm thiểu bởi chỉ thị keepalive_timeout .

Cache

Một tinh chỉnh cực kỳ quan trọng khác mà ta có thể thực hiện là kích thước cache . Nếu kích thước cache quá thấp, thì Nginx sẽ phải ghi vào một file tạm thời khiến đĩa đọc và ghi liên tục. Ta cần hiểu một số chỉ thị trước khi đưa ra bất kỳ quyết định nào.

client_body_buffer_size : Điều này xử lý kích thước cache ứng dụng client , nghĩa là bất kỳ hành động POST nào được gửi đến Nginx. Các hành động POST thường là gửi biểu mẫu.

client_header_buffer_size : Tương tự như chỉ thị trước, chỉ thay vào đó nó xử lý kích thước tiêu đề client . Đối với tất cả các ý định và mục đích, 1K thường là một kích thước phù hợp cho chỉ thị này.

client_max_body_size : Kích thước tối đa được phép cho một yêu cầu của khách hàng. Nếu kích thước tối đa bị vượt quá, thì Nginx sẽ xuất hiện lỗi 413 hoặc Yêu cầu thực thể quá lớn .

large_client_header_buffers : Số lượng và kích thước cache tối đa cho các tiêu đề client lớn.

client_body_buffer_size 10K; client_header_buffer_size 1k; client_max_body_size 8m; large_client_header_buffers 2 1k; 

Hết giờ

Thời gian chờ cũng có thể cải thiện đáng kể hiệu suất.

Các client_body_timeoutclient_header_timeout chỉ chịu trách nhiệm khi một server sẽ chờ đợi cho một cơ thể khách hàng hoặc tiêu đề của khách hàng sẽ được gửi sau khi yêu cầu. Nếu cả nội dung hoặc tiêu đề đều không được gửi, server sẽ đưa ra lỗi 408 hoặc Yêu cầu hết thời gian .

keepalive_timeout ấn định thời gian chờ cho các kết nối duy trì hoạt động với khách hàng. Nói một cách đơn giản, Nginx sẽ đóng các kết nối với client sau khoảng thời gian này.

Cuối cùng, send_timeout được cài đặt không phải trên toàn bộ quá trình chuyển câu trả lời, mà chỉ giữa hai thao tác đọc; Nếu sau thời gian này, khách hàng không nhận được gì, thì Nginx đang tắt kết nối.

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

Nén Gzip

Gzip có thể giúp giảm số lượng giao dịch chuyển mạng mà Nginx thực hiện. Tuy nhiên, hãy cẩn thận khi tăng gzip_comp_level quá cao vì server sẽ bắt đầu lãng phí chu kỳ cpu.

gzip             on; gzip_comp_level  2; gzip_min_length  1000; gzip_proxied     expired no-cache no-store private auth; gzip_types       text/plain application/x-javascript text/xml text/css application/xml; 

Cache file tĩnh

Có thể đặt tiêu đề hết hạn cho các file không thay đổi và được cung cấp thường xuyên. Chỉ thị này có thể được thêm vào khối server Nginx thực tế.

location ~* .(jpg|jpeg|png|gif|ico|css|js)$ { expires 365d; } 

Thêm và xóa bất kỳ loại file nào trong mảng ở trên để trùng với loại file server Nginx của bạn.

Ghi log

Nginx ghi lại mọi yêu cầu đến VPS vào một file log . Nếu bạn sử dụng phân tích để theo dõi điều này, bạn có thể cần tắt chức năng này. Chỉ cần chỉnh sửa chỉ thị access_log :

access_log off; 

Lưu file , sau đó chạy:

sudo service nginx restart 

Kết luận

Vào cuối ngày, một server được cấu hình đúng là một server được theo dõi và điều chỉnh cho phù hợp. Không có biến nào ở trên được cài đặt sẵn và cần được điều chỉnh cho từng trường hợp riêng biệt. Thậm chí xa hơn, bạn có thể đang tìm cách nâng cao hiệu suất máy của bạn với việc nghiên cứu cân bằng tải và horizontal partitioning . Đây chỉ là một vài trong số rất nhiều cải tiến mà một sysadmin tốt có thể thực hiện cho một server .

<div class = “author”> Gửi bởi: <a href=osystemhttps://twitter.com/alexkavonosystem> Alex Kavon </div>


Tags:

Các tin liên quan

Cách thiết lập Laravel, Nginx và MySQL với Docker Compose
2020-03-09
Cách cài đặt Nginx trên CentOS 8
2020-03-03
Cách thiết lập Django với Postgres, Nginx và Gunicorn trên Debian 10
2019-07-25
Cách tạo chứng chỉ SSL tự ký cho Nginx trên Debian 10
2019-07-15
Cách bảo mật Nginx bằng Let's Encrypt trên Debian 10
2019-07-11
Cách cài đặt Nginx trên Debian 10
2019-07-10
Cách cài đặt và bảo mật phpMyAdmin bằng Nginx trên server Debian 9
2019-06-13
Cách cài đặt và bảo mật phpMyAdmin với Nginx trên server Ubuntu 18.04
2019-04-18
Cách bảo mật một ứng dụng Node.js được chứa đựng bằng Nginx, Let's Encrypt và Docker Compose
2019-01-04
Cách cài đặt Nginx trên FreeBSD 11.2
2018-11-15