Giới thiệu
Trong vai trò là người dẫn dắt DevOps, bạn biết rằng một máy chủ web được cấu hình sai có thể làm lộ dữ liệu nhạy cảm và phá hủy niềm tin của người dùng. Nginx là một reverse proxy phổ biến, nhưng mặc định, nó đi kèm với cấu hình TLS khá thoáng. Hướng dẫn này sẽ đưa bạn qua bảy bước thực tiễn để bảo mật TLS, kích hoạt HTTP/2 và tối ưu hiệu suất mà không làm mất tính tương thích.
1. Nhận Chứng Chỉ Tin Cậy
- Tùy chọn miễn phí: Sử dụng Let’s Encrypt với
certbot. - Tùy chọn doanh nghiệp: Mua chứng chỉ EV từ một CA uy tín.
bash
# Cài đặt certbot (ví dụ trên Debian/Ubuntu)
sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx
# Tạo chứng chỉ cho example.com và www.example.com
sudo certbot --nginx -d example.com -d www.example.com
Lệnh trên tự động cập nhật cấu hình Nginx của bạn với một khối SSL cơ bản. Chúng ta sẽ tinh chỉnh nó trong các bước tiếp theo.
2. Bắt Buộc Chỉ Sử Dụng TLS 1.2 Trở Lên
Các phiên bản giao thức cũ hơn dễ bị tấn công POODLE, BEAST và các cuộc tấn công khác. Thêm đoạn sau vào khối server của bạn:
bash
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
TLS 1.3 được hỗ trợ trên các phiên bản OpenSSL hiện đại và cung cấp độ trễ thấp hơn.
3. Chọn Bộ Mật Khẩu Mạnh
Một danh sách mật khẩu được thiết kế tốt cân bằng an ninh và tính tương thích. Trình tạo cấu hình SSL của Mozilla đề xuất như sau cho tính tương thích trung gian:
bash
ssl_ciphers \
"ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:\
ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:\
ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256";
Tránh sử dụng RSA chỉ cho việc trao đổi khóa và các họ RC4, 3DES, hoặc MD5.
4. Kích Hoạt HTTP/2 Để Tăng Tốc Độ Tải Trang
HTTP/2 giảm số vòng đi và multiplex streams qua một kết nối duy nhất. Chỉ cần thêm cờ http2 vào chỉ thị listen:
bash
listen 443 ssl http2;
Đảm bảo rằng cơ sở khách hàng của bạn hỗ trợ HTTP/2; việc quay lại HTTP/1.1 là tự động.
5. Củng Cố Headers: HSTS, OCSP Stapling và Referrer-Policy
Các headers này yêu cầu trình duyệt giữ HTTPS và bảo vệ chống lại các cuộc tấn công hạ cấp.
bash
# HTTP Strict Transport Security (tối đa 2 năm)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
# OCSP Stapling – giảm độ trễ cho việc kiểm tra thu hồi chứng chỉ
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# Referrer-Policy – giới hạn rò rỉ thông tin
add_header Referrer-Policy "no-referrer-when-downgrade" always;
Nếu bạn dự định gửi miền của mình vào danh sách preload HSTS, hãy kiểm tra xem header có đáp ứng yêu cầu hay không.
6. Bật Nén Gzip/Brotli
Nén tài nguyên tĩnh giúp giảm băng thông và cải thiện TTFB. Nginx hỗ trợ cả Gzip và mô-đun Brotli mới hơn.
bash
# Gzip (dự phòng)
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml+rss image/svg+xml;
# Brotli (cần mô-đun ngx_brotli)
brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/json application/javascript text/xml application/xml+rss image/svg+xml;
Brotli cung cấp khả năng nén tốt hơn ~20% cho tài nguyên văn bản.
7. Kiểm Tra và Giám Sát Liên Tục
Sau khi áp dụng các thay đổi, hãy chạy một bài kiểm tra nhanh:
bash
# Kiểm tra SSL Labs (công khai)
curl -s https://www.ssllabs.com/ssltest/analyze.html?d=example.com | grep "Grade"
# Xác minh hỗ trợ HTTP/2 cục bộ
curl -I -s --http2 https://example.com | grep "HTTP/2"
Để theo dõi liên tục, hãy thêm một exporter Prometheus như nginx-exporter và thiết lập cảnh báo cho:
- Chứng chỉ sắp hết hạn (cảnh báo 30 ngày)
- Lỗi bắt tay TLS
- Các cuộc tấn công hạ cấp giao thức không mong muốn
Kết luận
Bằng cách làm theo bảy bước này, bạn sẽ có một frontend Nginx:
- Chỉ sử dụng các phiên bản TLS hiện đại
- Sử dụng các bộ mật khẩu đã được kiểm tra
- Phục vụ nội dung qua HTTP/2 với nén hiệu quả
- Truyền đạt ý định bảo mật qua các headers
- Theo dõi tình trạng và hiệu suất của chứng chỉ
Việc triển khai một ngăn xếp TLS được củng cố là một khoản đầu tư một lần mà mang lại lợi ích lâu dài cho niềm tin của người dùng và xếp hạng SEO. Để có thêm nhiều hướng dẫn thực hành và danh sách các đoạn mã Nginx sẵn sàng sản xuất, hãy xem tại https://lacidaweb.com.