0
0
Lập trình
Admin Team
Admin Teamtechmely

Tối ưu hiệu suất Nginx với TLS và HTTP/2 cho trang web đông truy cập

Đăng vào 6 tháng trước

• 4 phút đọc

Giới thiệu

Trong vai trò là một DevOps lead, bạn biết rằng một lớp web an toàn và nhanh chóng là điều không thể thương lượng cho các ứng dụng có lưu lượng truy cập cao. Nginx là một proxy ngược phổ biến, nhưng cấu hình TLS mặc định của nó thường không đạt tối ưu. Trong hướng dẫn thực tiễn này, chúng ta sẽ đi qua một thiết lập TLS được củng cố, kích hoạt HTTP/2 và thêm vào đó một số tinh chỉnh hiệu suất giúp giảm thiểu thời gian phản hồi (TTFB) chỉ trong vài mili giây.


Tại sao TLS và HTTP/2 quan trọng với Nginx

  • Bảo mật – Các trình duyệt hiện đại từ chối các mã hóa yếu và TLS 1.0/1.1. Việc bắt buộc sử dụng TLS 1.2+ giúp bảo vệ dữ liệu trong quá trình truyền tải.
  • Hiệu suất – HTTP/2 cho phép đa luồng trên một kết nối duy nhất, giảm thiểu số lần đi lại. Kết hợp với các mã hóa mạnh hỗ trợ bảo mật tiến lên, bạn sẽ nhận được cả tốc độ và quyền riêng tư.
  • SEO & Niềm tin – Google sử dụng HTTPS như một tín hiệu xếp hạng; một quá trình bắt tay TLS đúng cách cũng tăng cường sự tự tin của người dùng.

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

  • Một máy chủ chạy Ubuntu 22.04 (hoặc tương tự) với nginx ≥ 1.21.
  • Quyền truy cập root hoặc sudo.
  • Tên miền trỏ tới địa chỉ IP của máy chủ.
  • Kiến thức cơ bản về systemctlapt.

Các bước củng cố TLS

1. Nhận chứng chỉ

Đối với hầu hết các dự án, Let’s Encrypt cung cấp một giải pháp miễn phí và tự động. Cài đặt client certbot và yêu cầu một chứng chỉ:

Copy
sudo apt update && sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com

Certbot sẽ tự động chỉnh sửa khối máy chủ Nginx của bạn để bao gồm các chỉ thị ssl_certificate.

2. Cấu hình cài đặt SSL

Tạo một tệp snippet riêng để giữ cho cấu hình SSL của bạn gọn gàng:

Copy
# /etc/nginx/snippets/ssl-params.conf
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers \
  "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256";
ssl_ecdh_curve X25519:secp384r1;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;

# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

Bao gồm snippet này trong mỗi khối server phục vụ HTTPS:

Copy
server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    include snippets/ssl-params.conf;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # ... các khối vị trí của bạn ...
}

3. Kích hoạt HTTP/2

Chỉ thị listen 443 ssl http2; sẽ kích hoạt HTTP/2. Xác minh nó đang hoạt động với:

Copy
curl -I -s -o /dev/null -w "%{http_version}\n" https://example.com

Bạn sẽ thấy đầu ra là 2.

4. Tinh chỉnh các bộ mã hóa

Dòng ssl_ciphers ở trên chỉ chọn các bộ mã hóa AEAD hỗ trợ bảo mật tiến lên và được hỗ trợ rộng rãi. Tránh các bộ mã hóa cổ điển như chỉ có RSA hoặc 3DES.

5. Kích hoạt OCSP Stapling

OCSP stapling giảm thiểu bước mạng thêm cần thiết để trình duyệt xác minh việc thu hồi chứng chỉ. Snippet đã thiết lập ssl_stapling on; và trỏ tới các bộ giải DNS của Google để tìm kiếm nhanh.


Các yếu tố gia tăng hiệu suất bổ sung cho TLS

Trong khi TLS bảo mật kênh, bạn vẫn cần tối ưu hóa tốc độ:

  • nén gzip / brotli – phục vụ các tài sản đã được nén trước.
  • keepalive_timeout – giữ kết nối sống để tái sử dụng.
  • proxy_cache_path – lưu trữ các phản hồi từ upstream.
  • client_body_buffer_size – tránh tràn đĩa cho các body POST nhỏ.
  • sendfile on; – để kernel xử lý chuyển giao tệp tĩnh.

Ví dụ về việc kích hoạt Brotli (cần có module ngx_brotli):

Copy
brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/javascript image/svg+xml;

Giám sát và kiểm tra

  1. SSL Labs – Chạy quét miễn phí tại https://www.ssllabs.com/ssltest/ để xác nhận bạn có xếp hạng "A+".
  2. curl – Kiểm tra thương lượng giao thức:
Copy
curl -vvv https://example.com 2>&1 | grep -i "http/2"
  1. nginx -T – Xuất cấu hình đầy đủ và tìm kiếm các chỉ thị ssl_ trùng lặp.
  2. Prometheus + node_exporter – Theo dõi nginx_upstream_response_time và độ trễ bắt tay TLS.

Những cạm bẫy phổ biến cần tránh

  • Quên tải lại Nginx sau khi chỉnh sửa các snippet (sudo systemctl reload nginx).
  • Sử dụng các mã hóa lỗi thời – giữ cho dòng ssl_ciphers luôn mới theo hướng dẫn của Mozilla.
  • Vô hiệu hóa TLS 1.3 – nó cung cấp độ trễ tốt nhất; chỉ tắt nó nếu bạn có các ràng buộc về khách hàng cũ.
  • Bỏ qua OCSP stapling – nếu không có bộ giải thích hợp, stapling có thể gây ra lỗi bắt tay.
  • Nén quá mức – Brotli trên các tệp đã được nén (ví dụ: JPEG) lãng phí CPU.

Kết luận

Một thiết lập TLS được củng cố với HTTP/2, các bộ mã hóa hiện đại và OCSP stapling biến Nginx từ một proxy ngược đơn giản thành một cánh cửa trước hiệu suất cao và bảo mật hàng đầu. Kết hợp những cài đặt này với nén, bộ nhớ đệm và giám sát đúng cách, bạn sẽ thấy sự giảm đáng kể trong TTFB và cải thiện tư thế bảo mật.

Nếu bạn đang tìm kiếm một đối tác đáng tin cậy để kiểm tra hoặc lưu trữ các tác vụ Nginx của mình, hãy xem xét việc kiểm tra https://lacidaweb.com để có một cuộc trò chuyện không áp lực.

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