Cấu hình SSL tự động với Nginx không cần Certbot
Info
Bài viết này sẽ hướng dẫn bạn cấu hình SSL tự động với Nginx mà không cần cài đặt thêm phần mềm bên thứ ba như Certbot. Nếu bạn cần hỗ trợ, xin vui lòng liên hệ VinaHost qua Hotline 1900 6046 ext.3, gửi email về support@vinahost.vn hoặc bấm vào đây để chat trực tuyến.
Giao thức ACME (Automated Certificate Management Environment) giúp tự động hóa quá trình cấp phát, chứng thực, gia hạn và thu hồi các chứng chỉ bảo mật kỹ thuật số (ví dụ chứng chỉ SSL/TLS). Nhờ đó mà đơn giản hóa việc tương tác với CA (Certificate Authority - Cơ quan Chứng chỉ) để triển khai các dịch vụ dựa trên HTTPS.
Mô-đun ngx_http_acme_module
của Nginx hỗ trợ ACMEv2 (phiên bản mới của ACME, hỗ trợ chứng chỉ wildcard) cung cấp các chỉ thị để yêu cầu, cài đặt và gia hạn chứng chỉ ngay bên trong cấu hình của Nginx.
Yêu cầu#
- Nginx 1.26.0 hoặc mới hơn
- Đã cài đặt và bật mô-đun hỗ trợ ACME, xem tại đây
- Cổng 80 có thể được truy cập
- Nginx host phải truy cập được đường dẫn https://acme-v02.api.letsencrypt.org/directory
Lưu ý: Tính năng này chỉ hỗ trợ HTTP-01
Thực hiện#
Cấu hình Nginx#
Trong hướng dẫn này, chúng ta sẽ sử dụng Let's Encrypt.
#cấu hình resolver cho Nginx để gọi Let’s Encrypt API
resolver 8.8.8.8 1.1.1.1 valid=300s; #Google, Cloudflare
resolver_timeout 5s;
acme_issuer letsencrypt {
uri https://acme-v02.api.letsencrypt.org/directory;
contact khanhtq@vinahost.vn; #thay bằng email của bạn
state_path /var/cache/nginx/acme-letsencrypt;
accept_terms_of_service; #chấp nhận điều khoản
}
Vùng nhớ dùng chung để lưu trữ chứng chỉ, khóa riêng tư, dữ liệu chứng thực. Mặc định là 256K, có thể được tăng lên 1M như bên dưới.
Chỉ thị acme_certificate
trong khối server
sẽ tự động cấp phát và gia hạn chứng chỉ cho các tên miền được liệt kê bởi chỉ thị server_name
.
server {
listen 443 ssl; #phục vụ https
server_name acme.khanhtq.id.vn; #tên miền của bạn
#server_name .khanhtq.id.vn; #wildcard
acme_certificate letsencrypt;
ssl_certificate $acme_certificate; #chứng chỉ
ssl_certificate_key $acme_certificate_key; #khóa riêng tư
ssl_certificate_cache max=2; #cache 2 cặp chứng chỉ - khóa riêng tư
#cấu hình web cơ bản, thay bằng cấu hình thực tế
root /var/www/html;
index index.html;
}
server {
listen 80; #bắt buộc
server_name acme.khanhtq.id.vn;
access_log /var/log/nginx/access.log combined;
error_log /var/log/nginx/error.log debug;
location /.well-known/acme-challenge/ {
root /var/www/html;
}
location / {
return 404; #nếu không phải yêu cầu chứng thực
}
}
Tệp cấu hình đầy đủ#
resolver 8.8.8.8 1.1.1.1 valid=300s;
resolver_timeout 5s;
acme_issuer letsencrypt {
uri https://acme-v02.api.letsencrypt.org/directory;
contact khanhtq@vinahost.vn;
state_path /var/cache/nginx/acme-letsencrypt;
accept_terms_of_service;
}
acme_shared_zone zone=acme_shared:1M;
server {
listen 443 ssl;
server_name acme.khanhtq.id.vn;
#server_name .khanhtq.id.vn; #wildcard
access_log /var/log/nginx/access.log combined;
error_log /var/log/nginx/error.log debug;
acme_certificate letsencrypt;
ssl_certificate $acme_certificate;
ssl_certificate_key $acme_certificate_key;
ssl_certificate_cache max=2;
root /var/www/html;
index index.html;
}
server {
listen 80;
server_name acme.khanhtq.id.vn;
access_log /var/log/nginx/access.log combined;
error_log /var/log/nginx/error.log debug;
location /.well-known/acme-challenge/ {
root /var/www/html;
}
location / {
return 404;
}
}
Áp dụng các thay đổi#
Tải lại Nginx:
Kiểm tra#
Log truy cập phải có các yêu cầu chứng thực thành công từ Let's Encrypt.
Đầu ra mong đợi:
23.178.112.219 - - [30/Aug/2025:15:23:52 +0700] "GET /.well-known/acme-challenge/4CHRBkHOgR2zdj7NCFWNBG7CZjVBjWsasWlrx3fKblY HTTP/1.1" 200 87 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)"
3.1.6.219 - - [30/Aug/2025:15:23:52 +0700] "GET /.well-known/acme-challenge/4CHRBkHOgR2zdj7NCFWNBG7CZjVBjWsasWlrx3fKblY HTTP/1.1" 200 87 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)"
34.216.44.74 - - [30/Aug/2025:15:23:53 +0700] "GET /.well-known/acme-challenge/4CHRBkHOgR2zdj7NCFWNBG7CZjVBjWsasWlrx3fKblY HTTP/1.1" 200 87 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)"
51.20.136.232 - - [30/Aug/2025:15:23:53 +0700] "GET /.well-known/acme-challenge/4CHRBkHOgR2zdj7NCFWNBG7CZjVBjWsasWlrx3fKblY HTTP/1.1" 200 87 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)"
3.138.69.251 - - [30/Aug/2025:15:23:53 +0700] "GET /.well-known/acme-challenge/4CHRBkHOgR2zdj7NCFWNBG7CZjVBjWsasWlrx3fKblY HTTP/1.1" 200 87 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)"
Kiểm tra với công cụ trực tuyến như SSL Shopper.
Kết luận#
VinaHost đã hướng dẫn xong cách cấu hình SSL tự động với Nginx không cần Certbot. Hãy đảm bảo bạn đã cài đặt và bật mô-đun hỗ trợ ACME.
Chúc bạn thực hiện thành công! 🍻
THAM KHẢO CÁC DỊCH VỤ TẠI VINAHOST
>> SERVER – COLOCATION – CDN
>> CLOUD – VPS
>> HOSTING
>> WEBSITE
>> TÊN MIỀN