Bỏ qua điều hướng
← Về danh sách bài viết

Hướng dẫn cài đặt và cấu hình NGINX SSL toàn tập 2026

Cài đặt NGINX SSL miễn phí và tự động với Let's Encrypt. Nếu bạn thiết lập website cho cá nhân, doanh nghiệp vừa và nhỏ, hoặc các dự án startup, Let's Encrypt là giải pháp hoàn hảo.

Hướng dẫn cài đặt SSL trên Nginx

Trong kỷ nguyên số hiện tại, việc bảo mật website không còn là một “tùy chọn” mà đã trở thành tiêu chuẩn bắt buộc. Nếu bạn đang vận hành một máy chủ NGINX, việc cài đặt và cấu hình chứng chỉ SSL/TLS chính xác là rào chắn đầu tiên giúp bảo vệ cả hệ thống lẫn người dùng cuối.

Bài viết này sẽ cung cấp cho bạn quy trình cài đặt và cấu hình NGINX SSL từ A-Z, dù bạn sử dụng chứng chỉ miễn phí (Let’s Encrypt) hay chứng chỉ trả phí (Comodo, GeoTrust). Đặc biệt, chúng ta sẽ đi sâu vào các cấu hình Hardening (tối ưu bảo mật) để giúp server của bạn đạt điểm A+ trên các công cụ kiểm tra SSL.

Hướng dẫn cài đặt SSL trên Nginx
Hướng dẫn cài đặt SSL trên Nginx

Tại sao cấu hình SSL cho NGINX lại quan trọng?

Là những người làm kỹ thuật, chúng ta đều muốn đi thẳng vào phần thực hành. Tuy nhiên, việc hiểu rõ bản chất sẽ giúp bạn thiết lập cấu hình chuẩn xác hơn. Dưới đây là 2 lý do cốt lõi bạn bắt buộc phải có SSL:

Bảo vệ dữ liệu người dùng (Mã hóa SSL/TLS)

Mọi dữ liệu truyền tải giữa trình duyệt của người dùng và máy chủ NGINX của bạn (mật khẩu, thông tin thẻ tín dụng, email) mặc định ở dạng văn bản thuần túy (plaintext) nếu dùng HTTP. SSL/TLS đóng vai trò mã hóa toàn bộ luồng dữ liệu này, khiến các cuộc tấn công nghe lén (Man-in-the-Middle) trở nên vô dụng.

Tốt cho SEO và Xếp hạng Google

Google đã chính thức coi HTTPS là một tín hiệu xếp hạng (Ranking Signal). Các trình duyệt hiện đại (Chrome, Safari, Firefox, Edge) sẽ hiển thị cảnh báo đỏ “Not Secure” cực kỳ phản cảm nếu website không có SSL. Điều này trực tiếp làm tăng tỷ lệ thoát trang (Bounce Rate) và giết chết niềm tin của khách hàng trước khi họ kịp đọc nội dung của bạn.

Các yêu cầu chuẩn bị trước khi bắt đầu

Để quá trình cài đặt diễn ra trơn tru và không gặp lỗi vặt, bạn cần đảm bảo hệ thống đã đáp ứng đủ 3 điều kiện tiên quyết sau:

Môi trường máy chủ (Server)

Bạn cần có một máy chủ (VPS hoặc Dedicated Server) đang chạy hệ điều hành Linux (phổ biến nhất là Ubuntu/Debian hoặc CentOS/RHEL). NGINX đã được cài đặt và đang hoạt động. Quan trọng nhất, bạn phải có quyền Root hoặc quyền Sudo để thực thi các lệnh hệ thống.

Tên miền (Domain Name)

Bạn không thể cài SSL cho một domain chưa được định tuyến. Hãy truy cập trang quản lý DNS của nhà cung cấp tên miền và đảm bảo rằng Record A (hoặc AAAA cho IPv6) đã được trỏ chính xác về địa chỉ IP của máy chủ NGINX.

Tường lửa (Firewall)

Các chứng chỉ SSL (đặc biệt là Let’s Encrypt) cần giao tiếp qua môi trường Internet để xác thực. Hãy kiểm tra UFW, Firewalld hoặc Security Group trên Cloud (AWS, Google Cloud) để chắc chắn rằng bạn đã mở Port 80 (cho HTTP) và Port 443 (cho HTTPS).

Cài đặt NGINX SSL miễn phí và tự động với Let’s Encrypt

Nếu bạn thiết lập website cho cá nhân, doanh nghiệp vừa và nhỏ, hoặc các dự án startup, Let’s Encrypt là giải pháp hoàn hảo. Chứng chỉ này hoàn toàn miễn phí, được tin cậy toàn cầu và có thể tự động hóa 100%.

Bước 1: Cài đặt công cụ Certbot

Certbot là một client tự động hóa việc giao tiếp với Let’s Encrypt. Tùy thuộc vào hệ điều hành, bạn sử dụng lệnh sau (Ví dụ trên Ubuntu/Debian):

Bash

text
sudo apt update
sudo apt install certbot python3-certbot-nginx -y

Bước 2: Chạy lệnh xin cấp chứng chỉ Let’s Encrypt

Nhờ có plugin NGINX, Certbot có thể tự động phân tích file cấu hình của bạn, xin chứng chỉ và tự động chèn các cấu hình SSL cần thiết. Chạy lệnh:

Bash

text
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

Hệ thống sẽ yêu cầu bạn nhập email (để nhận cảnh báo bảo mật) và đồng ý với các điều khoản. Sau đó, Certbot sẽ lo toàn bộ phần việc còn lại.

Bước 3: Cấu hình tự động gia hạn (Auto-renewal)

Một nhược điểm của Let’s Encrypt là chứng chỉ chỉ có thời hạn 90 ngày. Tuy nhiên, bạn không cần làm thủ công. Certbot đã tự động tạo một timer trong hệ thống để gia hạn. Để kiểm tra xem cơ chế tự động gia hạn có hoạt động tốt không, hãy chạy lệnh chạy thử (dry run):

Bash

text
sudo certbot renew --dry-run

Nếu hệ thống báo thành công (success), bạn có thể kê cao gối ngủ, chứng chỉ của bạn sẽ tự động được làm mới khi còn 30 ngày.

4. Cài đặt NGINX SSL thủ công (Dành cho chứng chỉ mua từ nhà cung cấp Comodo, GeoTrust…)

Đối với các hệ thống ngân hàng, tài chính, hoặc tập đoàn lớn cần chứng chỉ EV (Extended Validation) hiển thị tên công ty, bạn sẽ phải mua SSL từ các tổ chức CA (Certificate Authority) và cấu hình thủ công.

Bước 1: Gộp chuỗi chứng chỉ (Bundle Certificate)

Khi nhận chứng chỉ từ nhà cung cấp, bạn thường nhận được 2 file: File chứng chỉ của tên miền (yourdomain.crt) và file của nhà cung cấp (ca-bundle.crt hoặc intermediate.crt). NGINX yêu cầu tất cả phải nằm trong một file duy nhất. Bạn dùng lệnh cat để gộp chúng lại theo đúng thứ tự (chứng chỉ của domain đứng trước, bundle đứng sau):

Bash

text
cat yourdomain.crt ca-bundle.crt > fullchain.crt

Lưu ý: Nếu không làm bước này, trình duyệt trên điện thoại hoặc các thiết bị cũ sẽ báo lỗi thiếu Root CA (chứng chỉ không đáng tin cậy).

Bước 2: Upload chứng chỉ (.crt) và Private Key (.key) lên Server

Sử dụng SFTP (như FileZilla) hoặc lệnh SCP để upload file fullchain.crt vừa tạo và file private.key (file được tạo ra lúc bạn sinh mã CSR) lên máy chủ. Thực hành bảo mật tốt nhất là lưu chúng vào thư mục: /etc/nginx/ssl/ và phân quyền hạn chế (chỉ Root mới được đọc file key).

Bước 3: Chỉnh sửa file cấu hình NGINX (nginx.conf / Server Block)

Mở file cấu hình tên miền của bạn (thường nằm ở /etc/nginx/sites-available/yourdomain) và điều chỉnh Server Block như sau:

Nginx

text
server {
    listen 443 ssl;
    server_name yourdomain.com www.yourdomain.com;

    ssl_certificate /etc/nginx/ssl/fullchain.crt;
    ssl_certificate_key /etc/nginx/ssl/private.key;

    # Cấu hình đường dẫn thư mục gốc
    root /var/www/yourdomain;
    index index.html index.php;

    location / {
        try_files $uri $uri/ =404;
    }
}

Bước 4: Kiểm tra cú pháp (nginx -t) và Restart NGINX

Đây là bước cực kỳ quan trọng. Trước khi khởi động lại dịch vụ, hãy luôn kiểm tra xem file cấu hình có lỗi syntax nào không:

Bash

text
sudo nginx -t

Nếu kết quả trả về là syntax is ok và test is successful, bạn có thể an tâm áp dụng thay đổi:

Bash

text
sudo systemctl reload nginx

5. Cấu hình tự động chuyển hướng HTTP sang HTTPS (Force HTTPS)

Dù bạn đã cài đặt HTTPS, người dùng vẫn có thể vô tình truy cập vào cổng 80 (HTTP). Để giải quyết triệt để, bạn cần cấu hình NGINX bắt buộc chuyển hướng (Force Redirect 301) mọi luồng traffic từ HTTP sang HTTPS.

Thêm một Server Block riêng biệt vào file cấu hình của bạn:

Nginx

text
server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    
    # Chuyển hướng 301 vĩnh viễn
    return 301 https://$host$request_uri;
}

Cấu hình này đảm bảo toàn bộ request HTTP sẽ được điều hướng sang phiên bản an toàn, đồng thời bảo toàn sức mạnh SEO (link juice) cho website.

6. Tối ưu hóa bảo mật tối đa cho NGINX SSL (Hardening)

Cài đặt thành công SSL là chưa đủ. Để chống lại các lỗ hổng như POODLE, BEAST, hay tấn công hạ cấp (Downgrade Attack) với tiêu chuẩn bảo mật khắt khe của năm 2026, bạn cần bổ sung các tinh chỉnh sau vào block server { listen 443 ssl; }:

Chỉ sử dụng các giao thức an toàn (TLS 1.2, TLS 1.3)

Các giao thức cũ như SSLv3, TLS 1.0 và TLS 1.1 đã bị khai tử vì chứa nhiều lỗ hổng chết người. Hãy ép NGINX chỉ sử dụng các chuẩn hiện đại:

Nginx

text
ssl_protocols TLSv1.2 TLSv1.3;

Cấu hình Cipher Suites mạnh mẽ

Cipher Suites là các thuật toán mã hóa. Bạn cần ưu tiên các thuật toán mạnh và vô hiệu hóa các thuật toán yếu:

Nginx

text
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

Tạo file Diffie-Hellman Parameters (DHParam)

Để tăng cường trao đổi khóa hoàn hảo (Perfect Forward Secrecy), hãy tạo một khóa DH 2048-bit (hoặc 4096-bit). Chạy lệnh này trên server (sẽ mất vài phút):

Bash

text
sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

Sau đó khai báo trong NGINX:

Nginx

text
ssl_dhparam /etc/nginx/ssl/dhparam.pem;

Kích hoạt HSTS (HTTP Strict Transport Security)

HSTS là một Header bảo mật yêu cầu trình duyệt của người dùng ghi nhớ việc chỉ sử dụng HTTPS cho các lần truy cập sau, dù người dùng cố tình gõ http://.

Nginx

text
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

7. Tổng hợp các lỗi NGINX SSL thường gặp và cách khắc phục

Trong quá trình thao tác, bạn có thể gặp một số lỗi. Dưới đây là 3 lỗi kinh điển nhất và cách xử lý nhanh chóng:

Lỗi nginx: [emerg] SSL_CTX_use_PrivateKey_file()

  • Nguyên nhân: Lỗi này xảy ra khi cặp Private Key (.key) và Public Key/Certificate (.crt) không khớp nhau. Thường là do bạn upload nhầm file key của tên miền khác, hoặc tạo lại CSR mới nhưng vẫn giữ file CRT cũ.
  • Cách khắc phục: Kiểm tra lại chính xác cặp Key và CRT. Bạn có thể dùng lệnh openssl để check mã MD5 của cả 2 file, nếu chuỗi MD5 giống nhau là khớp.

Lỗi SSL_ERROR_RX_RECORD_TOO_LONG trên trình duyệt

  • Nguyên nhân: Trình duyệt đang cố giao tiếp bằng giao thức HTTPS trên cổng 443, nhưng NGINX lại đang trả về dữ liệu HTTP thuần túy trên cổng đó. Thường do bạn cấu hình listen 443; nhưng quên thêm tham số ssl.
  • Cách khắc phục: Mở file cấu hình, tìm dòng listen 443; và sửa thành listen 443 ssl; hoặc đảm bảo có dòng ssl on; (với các bản NGINX cực cũ). Sau đó reload NGINX.

Trình duyệt báo “Mixed Content” sau khi cài SSL

  • Nguyên nhân: Cấu hình Server đã chuẩn, trình duyệt hiện ổ khóa, nhưng bị cảnh báo vàng “Mixed Content”. Lỗi này nằm ở Source Code (Mã nguồn) web của bạn. Trang web load qua HTTPS nhưng các tài nguyên bên trong (hình ảnh, file CSS, file JS) lại bị nhúng cứng (hard-code) bằng link http://....
  • Cách khắc phục: Bạn cần can thiệp vào mã nguồn, tìm kiếm và thay thế toàn bộ link http:// thành https:// hoặc dùng đường dẫn tương đối (Ví dụ: thay vì http://domain.com/image.jpg thì dùng /image.jpg). Nếu dùng WordPress, plugin “Really Simple SSL” có thể xử lý tự động.

Tổng kết

Việc cấu hình NGINX SSL không hề khó như nhiều người vẫn nghĩ. Dù bạn chọn tự động hóa với Let’s Encrypt để tiết kiệm thời gian hay cài đặt thủ công để phục vụ các dự án doanh nghiệp, chìa khóa thành công nằm ở việc hiểu rõ cấu trúc file cấu hình và tuân thủ các tiêu chuẩn Hardening mới nhất. Một hệ thống SSL được cấu hình chuẩn không chỉ bảo vệ dữ liệu mà còn là lời khẳng định uy tín của bạn trong mắt người dùng và Google.

Bạn đã sẵn sàng áp dụng các kỹ thuật cấu hình bảo mật nâng cao này cho máy chủ NGINX của mình chưa, hay bạn muốn tôi hướng dẫn thêm về cách kiểm tra điểm số SSL của website sau khi cài đặt bằng Qualys SSL Labs?