Vì sao cần NGINX reverse proxy + SSL Let’s Encrypt ngay? — pain point + 4-5 bullet ngắn
Chuyển đổi sang HTTPS với SSL Let’s Encrypt có vẻ phức tạp, nhưng NGINX làm điều này dễ dàng hơn bao giờ hết. Đừng để quy trình rườm rà cản trở bạn.
- 🔒 Bảo mật vượt trội: Mã hóa toàn bộ lưu lượng truy cập, bảo vệ dữ liệu người dùng.
- 🚀 Tăng tốc độ: NGINX tối ưu hóa việc phân phối nội dung, cải thiện trải nghiệm người dùng.
- 📈 SEO thân thiện: Google ưu tiên các trang web có HTTPS, giúp thứ hạng tìm kiếm tốt hơn.
- ✅ Tương thích rộng rãi: Hầu hết trình duyệt hiện đại đều hỗ trợ HTTPS, không còn cảnh báo lỗi.
- 💰 Miễn phí hoàn toàn: Let’s Encrypt cung cấp chứng chỉ SSL/TLS miễn phí, tiết kiệm chi phí.
1. Chuẩn bị môi trường — Cài đặt NGINX và Certbot
Tóm gọn: Chúng ta sẽ cài đặt NGINX và Certbot, công cụ tự động hóa việc lấy và gia hạn chứng chỉ SSL từ Let’s Encrypt.
Cài đặt NGINX
Đảm bảo hệ thống của bạn được cập nhật trước khi cài đặt.
sudo apt update
sudo apt upgrade -y
sudo apt install nginx -y
Kiểm tra trạng thái NGINX để đảm bảo nó đang chạy.
sudo systemctl status nginx
Output mẫu:
● nginx.service - A high performance web server and a rich reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since ...
Docs: man:nginx(8)
Main PID: ... (nginx)
Tasks: ... (nginx)
Memory: ...
CPU: ...
CGroup: /system.slice/nginx.service
├─... nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─... nginx: worker process
...
Cài đặt Certbot
Certbot là công cụ thiết yếu để tương tác với Let’s Encrypt.
sudo apt install certbot python3-certbot-nginx -y
💡 Mẹo: Lệnh này cài đặt Certbot cùng với plugin NGINX, giúp tự động cấu hình NGINX cho bạn.
2. Cấu hình NGINX làm Reverse Proxy
Tóm gọn: Chúng ta sẽ cấu hình NGINX để chuyển tiếp yêu cầu đến một ứng dụng backend (ví dụ: ứng dụng Node.js, Python, Docker).
Tạo file cấu hình NGINX cho domain của bạn
Giả sử bạn có một ứng dụng đang chạy trên cổng 3000.
sudo nano /etc/nginx/sites-available/your_domain.com
Dán nội dung sau vào file, thay your_domain.com và localhost:3000 cho phù hợp:
server {
listen 80;
server_name your_domain.com www.your_domain.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
listen 80;: Lắng nghe trên cổng 80 (HTTP).server_name: Tên miền bạn muốn NGINX xử lý.location /: Áp dụng cho tất cả các yêu cầu.proxy_pass: Chuyển tiếp yêu cầu đến địa chỉ backend của bạn.proxy_set_header: Truyền thông tin gốc của client đến backend.
Kích hoạt cấu hình và kiểm tra
Tạo symbolic link và kiểm tra cú pháp NGINX.
sudo ln -s /etc/nginx/sites-available/your_domain.com /etc/nginx/sites-enabled/
sudo nginx -t
Output mẫu nếu cấu hình đúng:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Nếu có lỗi, hãy kiểm tra lại file cấu hình bạn vừa tạo. Sau đó, reload NGINX.
sudo systemctl reload nginx
⚠️ Cảnh báo: Nếu bạn có cấu hình NGINX mặc định (
default), hãy xóa symbolic link của nó để tránh xung đột:sudo rm /etc/nginx/sites-enabled/default.
3. Lấy chứng chỉ SSL với Certbot
Tóm gọn: Certbot sẽ tự động lấy chứng chỉ SSL từ Let’s Encrypt và cấu hình NGINX để sử dụng chúng.
Chạy lệnh Certbot với plugin NGINX. Thay your_domain.com bằng tên miền của bạn.
sudo certbot --nginx -d your_domain.com -d www.your_domain.com
Certbot sẽ hỏi bạn một vài câu hỏi:
- Nhập địa chỉ email của bạn (để nhận thông báo gia hạn).
- Đồng ý với Điều khoản dịch vụ.
- Chọn có muốn chia sẻ email với EFF hay không.
- Chọn có muốn chuyển hướng HTTP sang HTTPS hay không (chọn 2 để chuyển hướng).
Nếu thành công, bạn sẽ thấy thông báo như sau:
Congratulations! You have successfully enabled HTTPS by installing a new certificate...
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/your_domain.com/fullchain.pem
Your key file has been saved in /etc/letsencrypt/live/your_domain.com/privkey.pem
...
Certbot tự động sửa đổi file cấu hình NGINX của bạn để sử dụng SSL và thiết lập chuyển hướng HTTP sang HTTPS.
4. Kiểm tra tự động gia hạn SSL
Tóm gọn: Let’s Encrypt cấp chứng chỉ có thời hạn 90 ngày. Certbot sẽ tự động gia hạn chúng trước khi hết hạn.
Certbot đã cài đặt một cron job hoặc systemd timer để chạy kiểm tra gia hạn hai lần mỗi ngày. Bạn có thể thử nghiệm quá trình gia hạn mà không thực sự gia hạn chứng chỉ.
sudo certbot renew --dry-run
Output mẫu nếu thành công:
Cert not due for renewal, but simulating renewal for the following certs:
your_domain.com (your_domain.com) -- using the certonly plugin
Starting new Let's Encrypt certificate request for your_domain.com
...
Dry run complete. You're ready to renew the certificate.
💡 Mẹo: Nếu bạn muốn kiểm tra xem NGINX có hoạt động với SSL hay không, hãy truy cập
https://your_domain.comtrong trình duyệt. Bạn sẽ thấy biểu tượng ổ khóa.
5. Cấu hình nâng cao (Tùy chọn)
Tóm gọn: Chúng ta có thể tinh chỉnh cấu hình NGINX để tăng cường bảo mật và hiệu suất.
Tùy chỉnh file cấu hình SSL
Certbot đã tạo một file cấu hình SSL riêng biệt tại /etc/letsencrypt/options-ssl-nginx.conf. Bạn có thể chỉnh sửa file cấu hình NGINX chính (/etc/nginx/sites-available/your_domain.com) để bao gồm các cài đặt bảo mật mạnh mẽ hơn.
server {
listen 80;
server_name your_domain.com www.your_domain.com;
# Chuyển hướng tất cả các yêu cầu HTTP sang HTTPS
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl http2;
server_name your_domain.com www.your_domain.com;
ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dh_param /etc/letsencrypt/ssl-dhparams.pem; # Certbot thường tạo cái này
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Sau khi chỉnh sửa, hãy kiểm tra lại cấu hình NGINX và reload.
sudo nginx -t
sudo systemctl reload nginx
Cấu hình HSTS (HTTP Strict Transport Security)
HSTS yêu cầu trình duyệt chỉ kết nối với trang web của bạn qua HTTPS.
Thêm dòng sau vào phần server lắng nghe cổng 443:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
💡 Mẹo: Bắt đầu với
max-agenhỏ (ví dụ:600) để kiểm tra, sau đó tăng dần lên31536000(1 năm) khi bạn chắc chắn mọi thứ hoạt động tốt.
Pitfalls & lỗi thường gặp
- Lỗi 404 Not Found: Thường xảy ra khi
proxy_passtrỏ sai địa chỉ backend hoặc backend không chạy.- Cách fix: Kiểm tra lại địa chỉ IP và cổng của ứng dụng backend. Đảm bảo ứng dụng backend đang chạy (
sudo systemctl status your_app).
- Cách fix: Kiểm tra lại địa chỉ IP và cổng của ứng dụng backend. Đảm bảo ứng dụng backend đang chạy (
- Lỗi “Connection refused” khi truy cập site: NGINX không thể kết nối đến ứng dụng backend.
- Cách fix: Kiểm tra tường lửa (firewall) trên server xem có chặn cổng của ứng dụng backend không. Sử dụng
sudo ufw statusđể xem trạng thái tường lửa. Nếu cần, cho phép cổng:sudo ufw allow 3000/tcp.
- Cách fix: Kiểm tra tường lửa (firewall) trên server xem có chặn cổng của ứng dụng backend không. Sử dụng
- Chứng chỉ SSL không được gia hạn: Cron job hoặc systemd timer của Certbot bị lỗi.
- Cách fix: Chạy
sudo certbot renewthủ công để xem thông báo lỗi. Kiểm tra log của Certbot tại/var/log/letsencrypt/letsencrypt.log. Đảm bảo tên miền trong cấu hình NGINX vẫn chính xác và trỏ về IP server.
- Cách fix: Chạy
- Lỗi “Too many redirects”: Thường do cấu hình cả HTTP và HTTPS đều cố gắng chuyển hướng, hoặc cấu hình NGINX và ứng dụng backend đều thực hiện chuyển hướng.
- Cách fix: Đảm bảo chỉ một nơi thực hiện chuyển hướng HTTP sang HTTPS. Nếu Certbot đã cấu hình chuyển hướng, hãy xóa các quy tắc chuyển hướng tương tự trong file cấu hình NGINX của bạn.
- NGINX không khởi động sau khi sửa file cấu hình: Lỗi cú pháp trong file cấu hình.
- Cách fix: Sử dụng
sudo nginx -tđể kiểm tra cú pháp. Lệnh này sẽ chỉ ra dòng nào trong file cấu hình bị lỗi.
- Cách fix: Sử dụng
Key takeaways
- NGINX là một reverse proxy mạnh mẽ và hiệu quả.
- Let’s Encrypt cung cấp chứng chỉ SSL/TLS miễn phí, giúp website của bạn an toàn và thân thiện với SEO.
- Certbot tự động hóa gần như toàn bộ quá trình cài đặt và gia hạn chứng chỉ SSL.
- Cấu hình NGINX đúng cách là chìa khóa để mọi thứ hoạt động trơn tru.
- Luôn kiểm tra lại cấu hình và thử nghiệm các tính năng mới.
FAQ
H3: Tôi có cần mua tên miền không?
Có, bạn cần có một tên miền đã đăng ký và trỏ DNS về địa chỉ IP của VPS. Let’s Encrypt yêu cầu điều này để xác minh quyền sở hữu tên miền.
H3: Ứng dụng backend của tôi chạy trên một server khác thì sao?
Bạn có thể cấu hình proxy_pass trỏ đến địa chỉ IP và cổng của server backend đó, ví dụ: proxy_pass http://192.168.1.100:8080;. Đảm bảo tường lửa cho phép kết nối giữa hai server.
H3: Tôi có thể dùng NGINX với Docker không?
Hoàn toàn có thể. Bạn có thể chạy NGINX trong một container Docker và sử dụng nó làm reverse proxy cho các container ứng dụng khác. Certbot cũng có thể chạy trong container hoặc trên host để lấy chứng chỉ.
H3: Chứng chỉ SSL của tôi sẽ hết hạn khi nào?
Chứng chỉ Let’s Encrypt có thời hạn 90 ngày. Certbot được cấu hình để tự động kiểm tra và gia hạn chứng chỉ hai lần mỗi ngày, đảm bảo chứng chỉ của bạn luôn hợp lệ.
H3: Tôi nên dùng cổng nào cho ứng dụng backend?
Bạn có thể dùng bất kỳ cổng nào không bị trùng lặp và không bị chặn bởi tường lửa. Các cổng phổ biến cho ứng dụng nội bộ là 3000, 8000, 8080.
H3: Làm thế nào để kiểm tra lại cấu hình NGINX sau khi thay đổi?
Luôn chạy lệnh sudo nginx -t để kiểm tra cú pháp cấu hình trước khi reload NGINX bằng sudo systemctl reload nginx.
Cần VPS chạy NGINX + SSL Let’s Encrypt?
Thiết lập NGINX reverse proxy và SSL Let’s Encrypt chưa bao giờ dễ dàng đến thế. Với VPS chất lượng từ VSIS, bạn có thể triển khai giải pháp này chỉ trong vài phút.
Hãy bắt đầu xây dựng hạ tầng web an toàn và hiệu quả ngay hôm nay với VPS tại vsis.net/vps.



