Chào bạn, hôm nay BinhNN Digital chia sẻ một tin vui: từ giờ Nginx đã hỗ trợ ACME ngay trong core, nghĩa là bạn có thể cài SSL tự động mà không cần xài Certbot hay script lằng nhằng nữa. 😎
ACME Là Gì Và Vì Sao Quan Trọng?
Nếu bạn từng phải đi xin chứng chỉ SSL/TLS thủ công, chắc hiểu cảnh mệt mỏi: tạo CSR → gửi cho CA → tải chứng chỉ → cài vào server → rồi 90 ngày sau lại làm lại từ đầu. Rối rắm, dễ sai và mất thời gian.
ACME (Automated Certificate Management Environment) ra đời để giải quyết chuyện đó. Nó cho phép web server tự động liên hệ với CA (như Let’s Encrypt) để cấp phát và gia hạn chứng chỉ. Nói đơn giản: bạn setup một lần, ACME lo hết mọi thứ.
Vì Sao ACME Tích Hợp Sẵn Trên Nginx Là Bước Đột Phá?
Trước đây, ai xài Nginx đều phải cài thêm Certbot hoặc acme.sh. Giờ thì khỏi cần, vì từ bản preview 12/08/2025, Nginx đã tích hợp ngx_http_acme_module viết bằng Rust, hỗ trợ ACMEv2.
Lợi ích rõ ràng:
- ✅ Cấu hình ngay trong
nginx.conf
, không cần tool ngoài - ✅ Tự động cấp & gia hạn chứng chỉ, không lo quên
- ✅ Ít rủi ro hơn vì giảm phụ thuộc bên thứ ba
- ✅ Hoạt động mượt trong môi trường container / DevOps pipeline
- ✅ Không cần restart server khi chứng chỉ gia hạn
Ví Dụ Cấu Hình SSL Tự Động Trên Nginx
Ví dụ dưới đây minh họa cách cài SSL cho domain staging.binhnn.dev
bằng Let’s Encrypt:
# Liên kết với ACME server
resolver 127.0.0.1:53;
acme_issuer letsencrypt {
uri https://acme-v02.api.letsencrypt.org/directory;
contact [email protected];
state_path /var/cache/nginx/acme-letsencrypt;
accept_terms_of_service;
}
acme_shared_zone zone=ngx_acme_shared:1M;
server {
listen 443 ssl;
server_name staging.binhnn.dev;
acme_certificate letsencrypt;
ssl_certificate $acme_certificate;
ssl_certificate_key $acme_certificate_key;
root /var/www/html;
index index.html;
}
server {
listen 80;
server_name staging.binhnn.dev;
location /.well-known/acme-challenge/ {
root /var/www/html;
}
location / {
return 404;
}
}
👉 Sau khi cấu hình xong, chỉ cần:
nginx -t
nginx -s reload
openssl s_client -connect staging.binhnn.dev:443
Là bạn sẽ thấy chứng chỉ từ Let’s Encrypt đã được cài và tự động gia hạn.
Gia Hạn SSL Tự Động – Không Cần Cron Job
Khác với trước đây phải setup cron, giờ Nginx tự gia hạn chứng chỉ khi gần hết hạn. Tất cả dữ liệu lưu trong state_path
, nên kể cả restart server thì key và chứng chỉ vẫn còn nguyên.
Mẹo Nhỏ Khi Dùng ACME Trên Nginx
- Mở port 80 để ACME xác minh (HTTP-01 challenge).
- Nếu gặp lỗi, check log ở
/var/log/nginx/error.log
. - Muốn xài CA khác ngoài Let’s Encrypt? Chỉ cần đổi
uri
trongacme_issuer
. - Nhiều domain thì nhớ tăng
acme_shared_zone
. - Theo dõi bản cập nhật Nginx để có thêm DNS-01 challenge (cho wildcard SSL).
Lưu Ý
- Hiện tại (preview) mới chỉ hỗ trợ HTTP-01 challenge, wildcard phải chờ update.
- Đảm bảo Nginx có quyền ghi vào thư mục
state_path
. - Nên backup
state_path
để tránh mất key. - Module này yêu cầu Nginx bản mới nhất (1.29.0+).
Kết
Tích hợp ACME vào Nginx là một bước tiến cực lớn. Với vài dòng config, bạn đã có HTTPS an toàn, SSL tự động gia hạn, không downtime, không phiền phức.
Nếu bạn đang vận hành web trên Nginx, lời khuyên của tui: update ngay để trải nghiệm cài SSL auto “xịn sò” này.