Biến Web "Cỏ" thành Pro: Trỏ Domain và bật SSL xanh lét
Chào mừng bạn quay trở lại series! 👋
Ở phần trước, chúng ta đã cài xong Nginx Proxy Manager (NPM). Nhưng hiện tại, nó giống như một người bảo vệ đang đứng gác... không khí. Chưa có website nào để nó bảo vệ cả.
Trong bài viết này, mình sẽ hướng dẫn bạn hai việc quan trọng nhất:
- Trỏ tên miền (Domain): Để người ta gõ
webcuaban.comlà vào được. - Kích hoạt SSL (HTTPS): Để có cái ổ khóa màu xanh uy tín, không bị trình duyệt cảnh báo "Not Secure" đỏ lòm.
1. Chuẩn bị một ứng dụng demo
Nếu bạn chưa có web app nào đang chạy, thì làm sao test? Đừng lo, mình sẽ dựng nhanh một con web siêu nhẹ để làm "chuột bạch".
Mở terminal VPS lên và chạy dòng lệnh này:
docker run -d --name web-test -p 8080:80 nginxdemos/helloChuyện gì vừa xảy ra? Bạn vừa bật một container demo ở cổng 8080. Giờ nếu bạn gõ http://<IP-VPS>:8080 lên trình duyệt, bạn sẽ thấy trang Hello World. Nhưng nhìn cái link IP:8080 nó phèn lắm. Nhiệm vụ của chúng ta là biến nó thành https://demo.tenmiencuaban.com.
2. Bước 1: Cấu hình DNS (Trỏ tên miền về IP)
Trước khi đụng vào NPM, bạn phải bảo cho cả thế giới biết tên miền của bạn nằm ở đâu.
- Đăng nhập vào trang quản lý tên miền (Namecheap, Cloudflare, Godaddy...).
- Tạo một bản ghi A Record:
- Name:
demo(hoặc@nếu bạn muốn dùng tên miền chính). - Content/Value: Điền địa chỉ IP Public của VPS bạn (Ví dụ:
1.2.3.4). - TTL: Để Auto hoặc thấp nhất (để cập nhật cho nhanh).
- Name:
Lưu ý: Nếu dùng Cloudflare, bạn có thể bật "Proxied" (đám mây cam) cũng được, nhưng để test cho dễ hiểu, bạn có thể tắt đám mây (DNS only) trước để đảm bảo kết nối trực tiếp.
3. Bước 2: Thêm Proxy Host trên NPM
Đây là lúc ma thuật xảy ra. 🎩✨
- Đăng nhập vào Nginx Proxy Manager (Port 81).
- Vào mục Hosts -> chọn Proxy Hosts.
- Bấm nút Add Proxy Host ở góc trên bên phải.
Một bảng cấu hình hiện ra, bạn điền như sau:
Tab "Details"
- Domain Names: Điền tên miền bạn vừa trỏ (VD:
demo.tenmiencuaban.com). Nhớ bấm Enter sau khi gõ xong để nó nhận. - Scheme: Chọn
http. - Forward Hostname / IP: Đây là chỗ quan trọng nhất!
- Không điền
localhosthay127.0.0.1(Vì NPM nằm trong Docker, localhost của nó không phải là localhost của VPS). - Hãy điền: IP Public của VPS hoặc IP Gateway của Docker (thường là
172.17.0.1). Để chắc ăn nhất cho người mới: Điền IP Public của VPS.
- Không điền
- Forward Port:
8080(Cổng của ứng dụng demo mình tạo ở trên). - Cache Assets / Block Common Exploits: Nên tích vào để tối ưu và bảo mật nhẹ.
Đừng bấm Save vội! Chuyển sang tab tiếp theo.
4. Bước 3: Kích hoạt SSL (Ổ khóa xanh)
Đừng để website trần trụi với HTTP. Hãy mặc áo giáp HTTPS cho nó.
Tab "SSL"
- SSL Certificate: Chọn dòng
Request a new SSL Certificate. - Force SSL: BẮT BUỘC TÍCH. Nó giúp tự động chuyển hướng người dùng từ http sang https.
- HTTP/2 Support: Tích luôn cho web load nhanh như gió.
- Email Address for Let's Encrypt: Điền email của bạn (để nó nhắc khi chứng chỉ sắp hết hạn, dù NPM sẽ tự gia hạn cho bạn).
- I Agree to the Terms...: Tích vào (không tích sao mà dùng).
Giờ thì hít một hơi thật sâu và bấm nút Save. 🖱️
5. Tận hưởng thành quả
Đợi khoảng 5-10 giây để NPM làm việc với Let's Encrypt. Nếu bảng pop-up đóng lại và bạn thấy dòng trạng thái "Online" màu xanh lá, nghĩa là THÀNH CÔNG! 🎉
Giờ hãy mở tab mới, gõ https://demo.tenmiencuaban.com.
Bạn sẽ thấy:
- Không cần gõ
:8080nữa. - Trang web hiện ra mượt mà.
- Trên thanh địa chỉ có biểu tượng Ổ khóa (Connection is secure).
Chúc mừng! Bạn vừa thực hiện quy trình chuẩn của một DevOps xịn sò: User -> HTTPS (443) -> Nginx Proxy Manager -> App (8080).
Lời kết
Bạn thấy đấy, thay vì gõ cả trang cấu hình nginx.conf dài ngoằng để setup SSL, chúng ta chỉ mất đúng 3 cú click chuột. Đó chính là lý do tại sao mình nói Nginx Proxy Manager là "chân ái".
Nhưng khoan, web lên rồi nhưng nhỡ có kẻ xấu muốn dò pass hay tấn công vào trang Admin thì sao? Ở Phần 4 (Phần cuối), mình sẽ chia sẻ những thủ thuật Bảo mật & Nâng cao: Chặn IP lạ, đặt mật khẩu lớp 2 cho web, và custom location.
👉 Thử thách nhỏ: Hãy thử trỏ một tên miền khác vào... chính trang Admin của NPM (Port 81) xem sao? Hẹn gặp bạn ở bài cuối nhé!
Discussion