Tiếp nối series trước Configure HTTPS use Self-Signed Certificate, phần này chúng ta sẽ tìm hiểu làm sao để cấu hình HTTPS với Nginx Webserver từ Let’s Encrypt
Yêu cầu chung
- Virtual Machine (Máy ảo) như VPS, EC2 (trên AWS cloud), VM (Google Cloud Platform, Azure Cloud)
- Địa chỉ IP Public được liên kết với máy ảo ở trên
- Domain (bao gồm trang quản lý domain)
Chuẩn bị
- Create 1 VM kèm public IP, chẳng hạn tạo tại Azure Cloud
- Sau khi hoàn thành, nó sẽ có IP Public do Azure cấp:
20.92.229.16
- Tiếp theo truy cập vào VM và cài đặt Nginx (như bài series trước)
- Sau khi cài đặt xong Nginx, truy cập vào IP public
20.92.229.16
sẽ show ra trang default của Nginx (cần mở firewall của VM với port 80-HTTP và 443-HTTPS)
- Cuối cùng, cần có domain (ở đây đã mua tên miền
spoved.xyz
ở Name Cheap) và tạo 1 domain, ví dụant-https.spoved.xyz
gắn vào IP Public trên
- Đợi 1 thời gian để DNS Server có thể phân giải tên miền
ant-https.spoved.xyz
, và khi truy cập
- Như ảnh trên domain
ant-https.spoved.xyz
đã phân giải đúng IP Public. NOTE: Đây là mạng global, nên ai cũng có thể truy cập được. Chúng ta đã xong phần chuẩn bị.
Cài Đặt HTTPS với Let’s Encrypt
Let’s Encrypt là dịch vụ cung cấp chứng chỉ SSL/TLS miễn phí và tự động.
- Cài đặt Certbot
Certbot là công cụ phổ biến để làm việc với Let’s Encrypt.
# Trên Ubuntu
sudo apt update
sudo apt install certbot python3-certbot-nginx
- Chỉnh lại file config của Nginx để nhận biết đúng domain, chúng ta sẽ chỉnh ở file default:
sudo vim /etc/nginx/sites-available/default
- Chúng ta chỉ cần sửa
server_name ant-https.spoved.xyz;
để Certbot biết rằng file config này cho domainant-https.spoved.xyz
. Ta được config như sau:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html
server_name ant-https.spoved.xyz;
location / {
try_files $uri $uri/ =404;
}
}
- Tiếp đến, tự Động Cấu Hình HTTPS với Certbot
sudo certbot --nginx -d ant-https.spoved.xyz
- Chỉ cần nhập 1 số thông tin tương tự như sau, Let’s Encrypt sẽ tự động tạo certificate và sửa lại file config Nginx
- Check lại file config, sẽ thấy nó thay đổi:
server {
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name ant-https.spoved.xyz;
location / {
try_files $uri $uri/ =404;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/ant-https.spoved.xyz/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/ant-https.spoved.xyz/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = ant-https.spoved.xyz) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 default_server;
listen [::]:80 default_server;
server_name ant-https.spoved.xyz;
return 404; # managed by Certbot
}
- Config bao gồm chuyển hướng HTTP -> HTTPS và thêm các file certificate bao gồm key và crt. Và khi truy cập
ant-https.spoved.xyz
- Như vậy chung ta đã xong làm thế nào để cấu hình HTTPS với Nginx Webserver từ Let’s Encrypt. Lưu ý nhỏ: Let’s Encrypt là nhà cung cấp SSL/TLS miễn phí nên thời hạn của nó là
3 tháng
, cần renew lại sau thời gian đó.
Cấu hình HTTP/2???
- Cách kiểm tra bất kỳ trang web/request nào là HTTP/1.1, HTTP/2 hay HTTP/3 bằng cách: Ở trình duyệt (Chrome chẳng hạn), ấn F12 và click vào
Network
. Sau đó ở thanh:Name Status Type
, nhấp chuột phải và chọnProtocol
- Sau đó bạn reload lại sẽ thấy các giá trị như:
- http/1.1: HTTP/1.1
- h2: HTTP/2
- h3: HTTP/3
- Ở trang web trên, hiện đang chỉ là HTTP/1.1
- Để cấu hình HTTP/2 bằng Nginx, ta thay đổi file config bằng cách sửa giá trị:
listen 443 ssl http2;
server {
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name ant-https.spoved.xyz;
location / {
try_files $uri $uri/ =404;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl http2; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/ant-https.spoved.xyz/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/ant-https.spoved.xyz/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
- Kiểm tra và tải lại Nginx
sudo nginx -t
sudo nginx -s reload
- Khi này ta tải lại trang web, Protocol sẽ là
HTTP/2
Kết luận
Trong bài viết này, chúng ta đã học cách cấu hình HTTPS với Nginx từ Let’s Encrypt và làm thế nào để cấu hình HTTP/2 trên trang web của bạn. HTTPS không chỉ bảo mật dữ liệu mà còn nâng cao uy tín website của bạn. Trong phần tiếp theo, chúng ta sẽ tìm hiểu sâu hơn về HTTP/2, cách cấu hình HTTP/3, tối ưu WebServer và các lợi ích của nó.