Giới Thiệu
Trong bài viết này, chúng ta sẽ cùng nhau khám phá các khái niệm cơ bản về tên miền, bản ghi DNS, máy chủ và cách chúng hoạt động cùng với Nginx hoặc Apache. Những kiến thức này rất cần thiết cho các lập trình viên, đặc biệt là những người mới bắt đầu làm quen với mạng máy tính và phát triển ứng dụng web.
1. Cơ Bản Về Tên Miền
- Tên miền (ví dụ:
myapp.com) là một nhãn dễ đọc cho con người. - Khi bạn mua một tên miền, bạn chỉ mua tên, không phải là dịch vụ lưu trữ hoặc máy chủ.
- Để nó hoạt động, bạn phải liên kết tên miền với địa chỉ IP của máy chủ (nơi ứng dụng của bạn được lưu trữ).
2. Bản Ghi DNS (Liên Kết Tên Miền với Máy Chủ)
Bản ghi DNS xác định cách mà tên miền/phụ tên miền trỏ đến các địa chỉ IP hoặc tên miền khác.
- A Record → Liên kết tên miền → địa chỉ IPv4
Ví dụ: myapp.com A 123.45.67.89
-
AAAA Record → Liên kết tên miền → địa chỉ IPv6
-
CNAME Record → Liên kết tên miền → một tên miền khác
Ví dụ: www.myapp.com CNAME myapp.com
- Phụ Tên Miền:
- api.myapp.com A 123.45.67.89
- blog.myapp.com A 123.45.67.89
→ Tất cả đều trỏ đến cùng một địa chỉ IP máy chủ.
3. Cách Thức Hoạt Động Của Các Phụ Tên Miền Trên Một Máy Chủ
- Máy chủ của bạn thường có một địa chỉ IP công cộng.
- Tất cả các phụ tên miền (
api.myapp.com,blog.myapp.com) đều giải quyết về cùng một địa chỉ IP. - Khi yêu cầu đến máy chủ, máy chủ web (Nginx/Apache) kiểm tra tiêu đề Host để biết trang web/phụ tên miền nào đã được yêu cầu.
- Dựa trên đó, nó phục vụ các ứng dụng khác nhau (qua Virtual Hosts hoặc server blocks).
4. Vai Trò Của Các Máy Chủ Web (Nginx / Apache)
Nginx hoặc Apache thực hiện:
- Lắng nghe trên cổng 80 (HTTP) và 443 (HTTPS).
- Đọc tiêu đề Host (
api.myapp.com,blog.myapp.com). - So khớp với cấu hình (
sites-availabletrong Nginx). - Phục vụ thư mục dự án chính xác hoặc chuyển tiếp yêu cầu đến các ứng dụng backend.
Tập Tin Dự Án
- Ứng dụng tĩnh (React, Angular, v.v.): Triển khai thư mục build (HTML, JS, CSS).
- Ứng dụng động (Node.js, Django, v.v.): Chạy ứng dụng trên cổng nội bộ (ví dụ:
5000), sau đó ngược proxy với Nginx.
5. Reverse Proxy Là Gì?
Tại sao chúng ta cần nó?
- Các ứng dụng backend không (và không nên) chạy trực tiếp trên cổng 80/443.
- Chúng thường chạy trên cổng nội bộ như
5000,8000, v.v. - Người ngoài không thấy hoặc truy cập những cổng đó.
👉 Reverse Proxy = Cổng vào
- Người dùng →
https://api.myapp.com(cổng 80/443). - Nginx chuyển tiếp nó →
http://localhost:5000. - Ứng dụng phản hồi → Nginx gửi lại cho người dùng.
6. Tại Sao Không Sử Dụng Trực Tiếp Backend?
- Bảo mật: Không tiết lộ các cổng ứng dụng thô.
- URL sạch: Người dùng chỉ thấy
myapp.com, không có:5000. - SSL: Nginx xử lý chứng chỉ HTTPS.
- Cân bằng tải: Có thể phân phối giữa nhiều máy chủ backend khác nhau.
7. Ví Dụ Cấu Hình Với Nginx
Backend
- Chạy ứng dụng Node.js/Django trên: http://localhost:5000
Cấu Hình Nginx
nginx
server {
listen 80;
server_name api.myapp.com;
location / {
proxy_pass http://localhost:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Quy Trình
- Trình duyệt → https://api.myapp.com/login
- Yêu cầu đến Nginx (cổng 80/443)
- Nginx chuyển tiếp đến backend (localhost:5000)
- Backend phản hồi → Nginx gửi lại → Trình duyệt hiển thị kết quả
8. Tóm Tắt Quy Trình Làm Việc
- Mua tên miền (nhận tên).
- Đặt bản ghi DNS → Tên miền → Địa chỉ IP máy chủ.
- Máy chủ nhận yêu cầu → Nginx/Apache lắng nghe.
- Nginx quyết định → Dựa trên tên miền/tiêu đề Host.
- Phục vụ tệp (tĩnh build) HOẶC proxy đến backend (ứng dụng động).
- Người dùng chỉ thấy tên miền sạch (không có cổng nội bộ).
Các Thực Hành Tốt Nhất
- Kiểm tra định kỳ cấu hình Nginx/Apache để đảm bảo không có lỗi cấu hình.
- Sử dụng chứng chỉ SSL để bảo mật kết nối giữa người dùng và máy chủ.
- Cân nhắc sử dụng các dịch vụ CDN để cải thiện hiệu suất tải trang.
Những Cạm Bẫy Thường Gặp
- Không cấu hình đúng bản ghi DNS có thể dẫn đến lỗi truy cập.
- Bỏ qua việc cập nhật chứng chỉ SSL có thể gây ra sự cố bảo mật.
Mẹo Tối Ưu Hiệu Suất
- Sử dụng các công cụ như Google PageSpeed Insights để kiểm tra tốc độ tải trang.
- Tối ưu hóa hình ảnh và tài nguyên tĩnh để giảm thời gian tải.
Câu Hỏi Thường Gặp
- Tên miền có thể thay đổi được không?
- Có, bạn có thể thay đổi tên miền nhưng cần cập nhật bản ghi DNS.
- Tại sao cần sử dụng reverse proxy?
- Để bảo mật và quản lý lưu lượng truy cập đến các ứng dụng backend.