Cách trỏ tên miền về VPS bằng DNS, Cloudflare và Nginx
Hướng dẫn trỏ tên miền về VPS bằng A, AAAA, CNAME; kiểm tra DNS propagation, cấu hình Cloudflare, Nginx và xử lý lỗi www.
Bài viết bởi Phạm Minh Thiện
Front-end Developer, trực tiếp thực hành Next.js, NestJS, Docker, Nginx và VPS Ubuntu.
Bài viết đã được kiểm tra lại ngày 21/7/2026.
Mục lục bài viết

Cách trỏ tên miền về VPS gồm hai phần tách biệt: DNS phải trả đúng IP, sau đó web server trên VPS phải nhận đúng Host và chuyển request tới ứng dụng. Chỉ tạo bản ghi A chưa đủ nếu Nginx chưa có server_name, firewall chặn cổng hoặc Cloudflare đang proxy sai chế độ.
Hướng dẫn này giải thích domain, nameserver, A/AAAA/CNAME, TTL và quy trình kiểm tra từ DNS đến HTTP. Bạn cũng sẽ biết cách xử lý lỗi domain gốc hoạt động nhưng www lỗi, hai hostname hiển thị hai website khác nhau hoặc DNS đã đổi nhưng máy vẫn dùng cache cũ.
Tóm tắt nhanh: Tạo A record cho
@, CNAME hoặc A chowww, kiểm tra bằngdig, cấu hình cùng hostname trong Nginx, mở 80/443 và chỉ cài HTTPS sau khi HTTP đã về đúng VPS.

Demo terminal: kiểm tra DNS và Nginx theo từng lớp
Kết quả DNS đúng nhưng HTTP sai thường cho thấy vấn đề đã chuyển sang Nginx hoặc ứng dụng. Demo dùng dig, curl --resolve và nginx -T để tách lỗi DNS khỏi lỗi web server.

dig +short deployeasy.vn A
dig +short www.deployeasy.vn CNAME
curl -I http://deployeasy.vn
curl --resolve deployeasy.vn:80:203.0.113.10 -I http://deployeasy.vn
sudo nginx -T | grep -n "server_name"
Lưu ý: Output trong ảnh và ví dụ là demo lab đã ẩn thông tin nhạy cảm. Khi chụp terminal thật, hãy che IP quản trị, username nội bộ, token, private key, mật khẩu và chuỗi kết nối database.
Domain là gì?
Domain hay tên miền là địa chỉ mà người dùng nhập vào trình duyệt.
deployeasy.vn
Một địa chỉ đầy đủ có thể gồm subdomain:
blog.deployeasy.vn
└──┬─┘ └────┬─────┘
subdomain domain chính
Domain không tự chứa source code, database hoặc hình ảnh. Nó chỉ là tên dùng để xác định tài nguyên trên Internet.
DNS là gì?
DNS là viết tắt của Domain Name System. DNS chuyển đổi tên miền thành địa chỉ hoặc đích mà máy tính có thể sử dụng.
deployeasy.vn
↓ DNS
203.0.113.10
↓
VPS chạy Nginx
DNS record là các chỉ dẫn trên authoritative DNS server. Chúng có thể cho biết domain trỏ tới IP nào, mail server nào hoặc chuỗi xác minh nào.
Nameserver là gì?
Nameserver là máy chủ có thẩm quyền trả lời DNS cho domain.
Bạn có thể:
- Dùng nameserver mặc định của nhà đăng ký.
- Đổi sang Cloudflare.
- Dùng DNS của nhà cung cấp hosting.
Khi đổi nameserver, bạn phải quản lý record tại nhà cung cấp DNS mới. Record tạo ở trang quản trị cũ sẽ không còn tác dụng nếu nameserver đã chuyển đi.
DNS zone là gì?
DNS zone là vùng cấu hình của một domain.
Ví dụ:
A @ 203.0.113.10
CNAME www deployeasy.vn
A api 203.0.113.10
TXT @ giá trị xác minh
MX @ mail.example.com
Ký hiệu @ thường đại diện cho domain gốc:
@ = deployeasy.vn
Các loại DNS record quan trọng
Bản ghi A
Bản ghi A trỏ hostname tới địa chỉ IPv4.
Type: A
Name: @
Content: 203.0.113.10
Kết quả:
deployeasy.vn → 203.0.113.10
Tạo cho API:
Type: A
Name: api
Content: 203.0.113.10
Bản ghi AAAA
AAAA trỏ hostname tới IPv6.
Chỉ thêm khi VPS và ứng dụng hỗ trợ IPv6 đúng cách. Một AAAA record sai có thể khiến một số người dùng kết nối qua IPv6 nhưng không mở được website.
Bản ghi CNAME
CNAME làm một hostname trở thành bí danh của hostname khác.
Type: CNAME
Name: www
Target: deployeasy.vn
Không dùng CNAME để trỏ trực tiếp tới IP.
Bản ghi TXT
TXT thường dùng cho:
- Xác minh domain.
- Google Search Console.
- SPF.
- DKIM.
- DMARC.
- Dịch vụ bên thứ ba.
Không xóa TXT record nếu chưa biết dịch vụ nào đang dùng.
Bản ghi MX
MX xác định mail server nhận email cho domain. MX không dùng để trỏ website.
TTL là gì?
TTL là thời gian resolver được phép cache DNS record.
TTL: 300 giây
TTL thấp giúp thay đổi được nhìn thấy sớm hơn. TTL cao giảm truy vấn nhưng khiến việc đổi IP có thể mất lâu hơn.
Proxy và DNS only trên Cloudflare
Cloudflare thường có hai trạng thái:
- Proxied: lưu lượng web đi qua Cloudflare.
- DNS only: Cloudflare chỉ trả DNS, người dùng kết nối thẳng tới VPS.
Khi mới cấu hình, DNS only giúp dễ kiểm tra origin. Sau khi website chạy ổn, bạn mới cân nhắc bật proxy và cấu hình SSL phù hợp.
Quy trình trỏ domain về VPS
Giả sử:
Domain: deployeasy.vn
VPS IP: 203.0.113.10
App: 127.0.0.1:3000
Bước 1: Xác định IP công khai
Trên VPS:
ip addr
Hoặc xem IP trong trang quản trị nhà cung cấp.
Không dùng IP private như:
10.x.x.x
172.16.x.x – 172.31.x.x
192.168.x.x
Bước 2: Tạo A record cho domain gốc
Type: A
Name: @
Content: 203.0.113.10
TTL: Auto
Bước 3: Tạo record cho www
Type: CNAME
Name: www
Target: deployeasy.vn
Bước 4: Tạo subdomain API
Type: A
Name: api
Content: 203.0.113.10
Bước 5: Kiểm tra DNS
Windows PowerShell:
Resolve-DnsName deployeasy.vn
Resolve-DnsName api.deployeasy.vn
Linux/macOS:
dig deployeasy.vn
dig api.deployeasy.vn
Cách phổ biến:
nslookup deployeasy.vn
Bước 6: Cấu hình Nginx
server {
listen 80;
listen [::]:80;
server_name deployeasy.vn www.deployeasy.vn;
location / {
proxy_pass http://127.0.0.1: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;
}
}
Kiểm tra:
sudo nginx -t
sudo systemctl reload nginx
Bước 7: Mở firewall
sudo ufw allow "Nginx Full"
sudo ufw status
Bước 8: Kiểm tra HTTP
curl -I http://deployeasy.vn
curl -I http://www.deployeasy.vn
Chỉ cài HTTPS sau khi HTTP đã đi tới đúng Nginx server block.
Dùng một VPS cho nhiều domain
deployeasy.vn → port 3000
api.deployeasy.vn → port 3001
admin.deployeasy.vn → port 3002
Nginx phân biệt request bằng server_name.
server {
listen 80;
server_name deployeasy.vn;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
server {
listen 80;
server_name api.deployeasy.vn;
location / {
proxy_pass http://127.0.0.1:3001;
}
}
Chuyển website sang VPS mới
Quy trình an toàn:
- Giảm TTL trước ngày chuyển.
- Deploy và test trên VPS mới.
- Đồng bộ database và file upload.
- Đổi DNS sang IP mới.
- Theo dõi cả server cũ và mới.
- Chỉ tắt server cũ khi lưu lượng đã chuyển ổn định.
Không xóa VPS cũ ngay sau khi đổi DNS.
Kiểm tra bằng file hosts
Windows:
C:\Windows\System32\drivers\etc\hosts
Linux/macOS:
/etc/hosts
Thêm:
203.0.113.10 deployeasy.vn
203.0.113.10 www.deployeasy.vn
Sau khi test phải xóa, nếu không máy của bạn sẽ bỏ qua DNS thật.
Lỗi thường gặp
DNS đúng nhưng website không mở
Kiểm tra:
sudo ss -tulpn
sudo systemctl status nginx
curl -I http://127.0.0.1
Có thể Nginx chưa chạy, firewall chặn, app chưa chạy hoặc proxy sai port.
Domain trả website khác
Request có thể rơi vào default server block:
sudo nginx -T
Tìm server_name trùng hoặc thiếu.
Chỉ www hoạt động
Có thể thiếu A record cho domain gốc hoặc thiếu domain trong server_name.
DNS chưa cập nhật
dig @1.1.1.1 deployeasy.vn
dig @8.8.8.8 deployeasy.vn
Cache ở từng mạng có thể khác nhau.
Đổi nameserver làm mất email
Khi đổi DNS provider, phải sao chép đầy đủ MX, SPF, DKIM và DMARC.
Checklist
[ ] Xác định đúng IP công khai
[ ] Nameserver đúng
[ ] A record cho @
[ ] CNAME hoặc A cho www
[ ] Record cho subdomain
[ ] Kiểm tra bằng dig/nslookup
[ ] Nginx server_name đúng
[ ] Port 80 và 443 mở
[ ] HTTP chạy trước SSL
[ ] HTTPS gồm đủ hostname
[ ] Chọn www hoặc non-www làm canonical
Câu hỏi thường gặp
Có cần mua domain và hosting cùng nơi không?
Không. Domain, DNS và hosting có thể dùng các nhà cung cấp khác nhau.
Một domain có trỏ tới nhiều IP được không?
Có thể, nhưng nhiều A record không tự tương đương một load balancer có healthcheck.
Có cần Cloudflare không?
Không bắt buộc. Bạn có thể dùng DNS của registrar hoặc nhà cung cấp khác.
DNS propagation mất bao lâu?
Không có thời gian chính xác cho mọi trường hợp. Nó phụ thuộc TTL, cache và loại thay đổi.
Bài viết liên quan
- Cấu hình VPS Ubuntu mới
- Nginx Reverse Proxy là gì?
- Cài SSL HTTPS bằng Certbot
- Sửa lỗi Nginx 502 Bad Gateway
Kết luận
Domain là tên dễ nhớ, DNS là hệ thống chỉ đường, còn VPS là nơi chạy website. Trỏ domain thành công cần cả DNS đúng và server lắng nghe đúng hostname, port.
Nguồn tham khảo
Đọc tiếp
Bài viết liên quan
Deploy Node.js lên VPS bằng PM2 và Nginx từ A–Z
Hướng dẫn deploy Node.js lên VPS Ubuntu bằng PM2 và Nginx: build, biến môi trường, reverse proxy, HTTPS, log, healthcheck và rollback.
Đọc bài →Monitoring VPS production: Log, CPU, RAM, disk và healthcheck
Hướng dẫn monitoring VPS production bằng journalctl, Nginx log, PM2, Docker healthcheck; theo dõi CPU, RAM, disk, uptime và cảnh báo.
Đọc bài →GitHub Actions CI/CD: Tự động deploy Node.js lên VPS
Tạo GitHub Actions CI/CD để build, test và tự động deploy Node.js lên VPS qua SSH an toàn, có secrets, healthcheck, concurrency và rollback.
Đọc bài →