kiến thức mạng máy tính dành cho developer
Dưới đây là bộ kiến thức mạng máy tính dành cho developer, tập trung vào những phần hay gặp khi làm Web, API, Rails/Node.js, Docker, Cloud, ALB/Nginx, database, microservices.
1. Mạng máy tính là gì?
Mạng máy tính là hệ thống cho phép nhiều thiết bị giao tiếp với nhau.
Ví dụ:
Laptop của bạn → Router Wi-Fi → Internet → Server AWS → Database
Trong thực tế developer thường gặp các case như:
Browser → Cloudflare → ALB → Nginx → Rails/Node.js → Database
Hoặc local development:
Browser → localhost:3000 → Backend app → PostgreSQL/MySQL
2. Client, Server, Request, Response
Client
Client là bên gửi request.
Ví dụ:
Browser
Mobile app
Postman
curl
Frontend Next.js
IoT device
Server
Server là bên nhận request và xử lý.
Ví dụ:
Rails API
Node.js API
Nginx
Database
Redis
S3
Request / Response
Khi client gọi API:
GET /api/users HTTP/1.1
Host: example.com
Authorization: Bearer xxx
Server trả về:
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 1,
"name": "Tanaka"
}
Luồng cơ bản:
Client gửi request → Server xử lý → Server trả response
3. IP Address
IP là địa chỉ của thiết bị trong mạng.
Ví dụ:
192.168.1.10
10.0.1.25
172.16.0.5
8.8.8.8
Có 2 loại chính:
Public IP
Là IP truy cập được từ Internet.
Ví dụ:
13.115.xxx.xxx
54.250.xxx.xxx
Thường dùng cho:
Load Balancer
Server public
Router Internet
Private IP
Là IP nội bộ, không truy cập trực tiếp từ Internet.
Các dải private phổ biến:
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
Ví dụ trong AWS VPC:
10.0.1.15
10.0.2.30
Server backend, database thường dùng private IP để bảo mật.
4. Port là gì?
Port là “cổng” để phân biệt service trên cùng một máy.
Ví dụ một server có IP:
192.168.1.10
Trên server đó có nhiều service:
192.168.1.10:22 SSH
192.168.1.10:80 HTTP
192.168.1.10:443 HTTPS
192.168.1.10:3000 Rails / Node dev server
192.168.1.10:5432 PostgreSQL
192.168.1.10:3306 MySQL
192.168.1.10:6379 Redis
Ví dụ:
curl http://localhost:3000
Nghĩa là gọi service đang chạy ở port 3000 trên máy local.
5. localhost, 127.0.0.1, 0.0.0.0
localhost / 127.0.0.1
Là chính máy hiện tại.
localhost = 127.0.0.1 = máy của bạn
Ví dụ:
rails server -p 3000
Truy cập:
http://localhost:3000
0.0.0.0
Nghĩa là listen trên tất cả network interfaces.
Ví dụ:
rails server -b 0.0.0.0 -p 3000
Khi dùng Docker, VM, WSL, hoặc muốn máy khác truy cập vào service của bạn, thường cần bind 0.0.0.0.
So sánh:
127.0.0.1 → chỉ máy local truy cập được
0.0.0.0 → máy khác trong network có thể truy cập nếu firewall/port cho phép
6. DNS là gì?
DNS chuyển domain thành IP.
Ví dụ:
example.com → 93.184.216.34
Khi bạn truy cập:
https://google.com
Máy tính sẽ hỏi DNS:
google.com có IP là gì?
Sau đó mới kết nối đến IP đó.
Một số record DNS hay gặp:
| Record | Ý nghĩa |
|---|---|
| A | Domain trỏ đến IPv4 |
| AAAA | Domain trỏ đến IPv6 |
| CNAME | Alias sang domain khác |
| MX | Mail server |
| TXT | Verify domain, SPF, DKIM |
| NS | Name server |
Ví dụ:
api.example.com CNAME alb-xxx.ap-northeast-1.elb.amazonaws.com
Nghĩa là domain api.example.com trỏ sang ALB của AWS.
7. HTTP và HTTPS
HTTP
HTTP là protocol dùng cho web.
Ví dụ:
GET /users
POST /login
PUT /users/1
DELETE /users/1
Các method hay gặp:
| Method | Ý nghĩa |
|---|---|
| GET | Lấy dữ liệu |
| POST | Tạo dữ liệu |
| PUT | Cập nhật toàn bộ |
| PATCH | Cập nhật một phần |
| DELETE | Xóa dữ liệu |
HTTPS
HTTPS = HTTP + TLS/SSL.
Nó giúp:
Mã hóa dữ liệu
Xác thực server
Chống nghe lén / sửa dữ liệu trên đường truyền
Ví dụ:
http://example.com → không mã hóa
https://example.com → có mã hóa
Trong production gần như luôn phải dùng HTTPS.
8. TLS / SSL là gì?
TLS là lớp bảo mật cho HTTPS.
Luồng đơn giản:
Client → Server: Tôi muốn kết nối HTTPS
Server → Client: Đây là certificate của tôi
Client kiểm tra certificate
Hai bên thống nhất key mã hóa
Sau đó truyền dữ liệu đã mã hóa
Developer hay gặp lỗi TLS như:
SSL certificate problem
certificate verify failed
wrong version number
TLS handshake timeout
Nguyên nhân thường là:
Certificate hết hạn
Sai domain CN/SAN
Thiếu intermediate certificate
Server không hỗ trợ TLS version client yêu cầu
Cipher suite không tương thích
Ví dụ kiểm tra TLS:
openssl s_client -connect example.com:443 -servername example.com
9. TCP và UDP
TCP
TCP đảm bảo dữ liệu đến đúng thứ tự và không bị mất.
Dùng cho:
HTTP/HTTPS
SSH
Database
Email
Đặc điểm:
Tin cậy
Có bắt tay kết nối
Có retry
Chậm hơn UDP một chút
TCP handshake:
Client → SYN → Server
Client ← SYN-ACK ← Server
Client → ACK → Server
Sau đó mới truyền dữ liệu.
UDP
UDP gửi nhanh nhưng không đảm bảo dữ liệu đến nơi.
Dùng cho:
DNS
Video call
Game online
Streaming
VoIP
Đặc điểm:
Nhanh
Không cần kết nối trước
Không đảm bảo packet đến đủ
10. OSI Model cho developer
Mô hình OSI có 7 tầng, nhưng developer thường cần hiểu thực dụng như sau:
| Layer | Ý nghĩa | Ví dụ |
|---|---|---|
| L7 Application | App protocol | HTTP, HTTPS, DNS |
| L6 Presentation | Mã hóa/format | TLS, JSON, XML |
| L5 Session | Phiên kết nối | Login session, TLS session |
| L4 Transport | Truyền dữ liệu | TCP, UDP |
| L3 Network | Định tuyến | IP, router |
| L2 Data Link | Mạng nội bộ | Ethernet, MAC |
| L1 Physical | Vật lý | Cable, Wi-Fi |
Khi debug lỗi mạng, nên tự hỏi lỗi đang ở tầng nào.
Ví dụ:
DNS lỗi → Layer 7
TLS lỗi → Layer 6/7
Connection refused → Layer 4
No route to host → Layer 3
Cable/Wi-Fi lỗi → Layer 1/2
11. Proxy là gì?
Proxy là máy trung gian đứng giữa client và server.
Client → Proxy → Server
Có 2 loại quan trọng.
Forward Proxy
Dùng phía client.
Client → Proxy công ty → Internet
Ví dụ công ty chặn một số website, hoặc bắt tất cả request đi qua proxy.
Reverse Proxy
Dùng phía server.
User → Nginx / ALB / Cloudflare → Backend app
Ví dụ:
User → Nginx → Rails app port 3000
Nginx config:
location / {
proxy_pass http://127.0.0.1:3000;
}
Nghĩa là user gọi Nginx, Nginx chuyển tiếp request vào app Rails.
12. Load Balancer
Load balancer phân phối traffic đến nhiều server.
User
↓
Load Balancer
↓
Server 1
Server 2
Server 3
Mục đích:
Tăng khả năng chịu tải
Tăng độ ổn định
Tự động bỏ server lỗi
Hỗ trợ HTTPS termination
Ví dụ AWS ALB:
User → ALB → ECS Task Rails
ALB thường kiểm tra server bằng health check:
GET /health_check
Nếu server trả 200 OK, ALB coi server còn sống.
Nếu server lỗi, ALB không route traffic vào server đó nữa.
13. NAT là gì?
NAT là cơ chế đổi địa chỉ IP khi đi qua router/firewall.
Ví dụ trong nhà:
Laptop: 192.168.1.10
Phone: 192.168.1.11
Router public IP: 113.xxx.xxx.xxx
Khi laptop truy cập Internet, website bên ngoài chỉ thấy IP của router:
113.xxx.xxx.xxx
Không thấy IP private:
192.168.1.10
Trong AWS:
Private Subnet → NAT Gateway → Internet
Database/app trong private subnet có thể gọi Internet qua NAT, nhưng Internet không gọi trực tiếp vào private subnet được.
14. Firewall / Security Group
Firewall kiểm soát traffic được phép đi vào/đi ra.
Ví dụ rule:
Allow TCP 443 from 0.0.0.0/0
Allow TCP 22 from office IP only
Allow TCP 5432 from app server only
Trong AWS, Security Group hoạt động như firewall cho EC2, RDS, ALB, ECS.
Ví dụ chuẩn:
Internet → ALB:443 Allow
ALB → ECS:3000 Allow
ECS → RDS MySQL:3306 Allow
Internet → RDS:3306 Deny
Thiết kế tốt:
Database không public
Backend nằm private subnet
Chỉ ALB public
SSH giới hạn IP
15. Subnet, CIDR, VPC
CIDR
CIDR mô tả dải IP.
Ví dụ:
10.0.0.0/16
Có khoảng 65,536 IP.
10.0.1.0/24
Có khoảng 256 IP.
VPC
VPC là mạng riêng trong cloud.
Ví dụ AWS:
VPC: 10.0.0.0/16
Public Subnet 1: 10.0.1.0/24
Public Subnet 2: 10.0.2.0/24
Private Subnet 1: 10.0.11.0/24
Private Subnet 2: 10.0.12.0/24
Kiến trúc phổ biến:
Internet
↓
ALB public subnet
↓
ECS / EC2 private subnet
↓
RDS private subnet
16. Routing là gì?
Routing quyết định packet đi đường nào.
Ví dụ route table:
10.0.0.0/16 local
0.0.0.0/0 internet gateway
Nghĩa là:
Traffic nội bộ 10.0.0.0/16 đi trong VPC
Traffic còn lại đi ra Internet Gateway
Private subnet thường route như sau:
10.0.0.0/16 local
0.0.0.0/0 NAT Gateway
Public subnet:
10.0.0.0/16 local
0.0.0.0/0 Internet Gateway
17. Connection timeout, read timeout, idle timeout
Developer rất hay gặp timeout.
Connection timeout
Client không kết nối được đến server trong thời gian cho phép.
Ví dụ:
Server down
Port bị chặn
DNS sai
Firewall chặn
Network unreachable
Read timeout
Kết nối được rồi, nhưng server xử lý quá lâu không trả response.
Ví dụ:
Query database chậm
API xử lý lâu
External API treo
Idle timeout
Connection không có data trong một thời gian thì bị đóng.
Ví dụ ALB idle timeout 60 giây:
Client gửi request
Backend xử lý hơn 60s
ALB đóng connection
Client nhận 504 Gateway Timeout
18. Keep-Alive là gì?
Keep-Alive cho phép tái sử dụng TCP connection.
Không có Keep-Alive:
Request 1 → tạo TCP connection → xử lý → đóng
Request 2 → tạo TCP connection → xử lý → đóng
Request 3 → tạo TCP connection → xử lý → đóng
Có Keep-Alive:
Tạo TCP connection một lần
Request 1 dùng connection đó
Request 2 dùng lại
Request 3 dùng lại
Lợi ích:
Giảm TCP handshake
Giảm TLS handshake
Tăng performance
Giảm latency
Header thường thấy:
Connection: keep-alive
Trong hệ thống có IoT/device gửi data định kỳ, keep-alive giúp giảm chi phí kết nối.
19. HTTP Status Code
Developer cần nhớ các status chính.
2xx Success
200 OK
201 Created
204 No Content
3xx Redirect
301 Moved Permanently
302 Found
304 Not Modified
4xx Client Error
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
409 Conflict
422 Unprocessable Entity
429 Too Many Requests
5xx Server Error
500 Internal Server Error
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
Ý nghĩa thực tế:
400 → request sai
401 → chưa login/token sai
403 → không có quyền
404 → không tìm thấy
422 → validation error
429 → rate limit
500 → app lỗi
502 → proxy không gọi được backend
503 → service unavailable
504 → upstream timeout
20. 502, 503, 504 khác nhau thế nào?
Đây là lỗi rất hay gặp khi dùng Nginx/ALB.
502 Bad Gateway
Proxy gọi backend nhưng backend trả lỗi hoặc connection lỗi.
Ví dụ:
Nginx → Rails app chết
Nginx → sai port
Backend reset connection
503 Service Unavailable
Service tạm thời không sẵn sàng.
Ví dụ:
Không có healthy target trong ALB
Server đang deploy
App overload
Maintenance
504 Gateway Timeout
Proxy gọi backend nhưng backend phản hồi quá lâu.
Ví dụ:
Query DB lâu
API xử lý hơn timeout của ALB/Nginx
External API bị chậm
21. DNS cache và lỗi hay gặp
Khi đổi DNS, không phải lúc nào cũng có hiệu lực ngay.
Lý do là DNS có TTL.
Ví dụ:
TTL = 300 giây
Nghĩa là DNS cache có thể giữ kết quả trong 5 phút.
Lệnh kiểm tra DNS:
dig example.com
nslookup example.com
Kiểm tra domain resolve ra IP nào:
dig +short example.com
Kiểm tra CNAME:
dig example.com CNAME
22. CORS là gì?
CORS là cơ chế browser chặn request cross-origin nếu server không cho phép.
Ví dụ frontend chạy ở:
https://frontend.example.com
Gọi API:
https://api.example.com
Đây là khác origin, nên browser kiểm tra CORS.
Server cần trả header:
Access-Control-Allow-Origin: https://frontend.example.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization
Lỗi CORS thường chỉ xảy ra trên browser. Gọi bằng curl hoặc Postman có thể vẫn thành công.
Điểm quan trọng:
CORS là chính sách của browser, không phải lỗi network thuần túy.
23. Cookie, Domain, SameSite, Secure
Khi login web app, cookie rất quan trọng.
Ví dụ response:
Set-Cookie: session_id=abc123; Path=/; HttpOnly; Secure; SameSite=Lax
Các thuộc tính:
| Thuộc tính | Ý nghĩa |
|---|---|
| HttpOnly | JavaScript không đọc được cookie |
| Secure | Chỉ gửi cookie qua HTTPS |
| SameSite | Kiểm soát gửi cookie cross-site |
| Domain | Domain nào được dùng cookie |
| Path | Path nào được dùng cookie |
Lỗi hay gặp:
Login thành công nhưng reload bị logout
Cookie không gửi sang API
Frontend khác domain backend
SameSite/Secure config sai
Nếu frontend/backend khác domain, cần kiểm tra:
CORS
credentials: include
Access-Control-Allow-Credentials
SameSite=None; Secure
Cookie domain
HTTPS
24. Docker network cho developer
Khi dùng Docker Compose, mỗi service có hostname theo tên service.
Ví dụ:
services:
app:
build: .
ports:
- "3000:3000"
db:
image: postgres
ports:
- "5432:5432"
Từ máy host:
localhost:5432
Từ container app gọi database:
db:5432
Không phải:
localhost:5432
Vì localhost trong container nghĩa là chính container đó.
Ví dụ config đúng:
DATABASE_HOST=db
DATABASE_PORT=5432
Sai phổ biến:
DATABASE_HOST=localhost
Trong container, localhost không phải máy host, cũng không phải container database.
25. WSL / Ubuntu / Localhost
Khi dùng Windows + WSL + Docker, network có thể gây nhầm.
Các case hay gặp:
App chạy trong WSL
Browser chạy trên Windows
Database chạy trong Docker
Một số lưu ý:
localhost trên Windows ≠ luôn luôn giống localhost trong WSL
localhost trong container ≠ localhost trên máy host
Khi debug nên xác định rõ:
Service đang chạy ở đâu?
Client gọi từ đâu?
Hostname/IP là gì?
Port có expose chưa?
Firewall có chặn không?
26. Nginx reverse proxy cơ bản
Ví dụ app Rails chạy port 3000.
Nginx nhận request port 80/443 rồi proxy vào Rails:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Các header quan trọng:
Host
X-Forwarded-For
X-Forwarded-Proto
X-Real-IP
Rails/Node.js thường dựa vào các header này để biết:
Request gốc là HTTP hay HTTPS?
IP thật của user là gì?
Domain user đang truy cập là gì?
27. X-Forwarded-For là gì?
Khi đi qua proxy, backend chỉ thấy IP của proxy.
Ví dụ:
User IP: 1.2.3.4
ALB IP: 10.0.1.10
Backend thấy remote_addr: 10.0.1.10
Proxy thêm header:
X-Forwarded-For: 1.2.3.4
Nếu qua nhiều proxy:
X-Forwarded-For: 1.2.3.4, 10.0.1.10, 10.0.2.20
Backend cần cấu hình trusted proxy đúng, nếu không có thể lấy sai IP.
28. WebSocket
WebSocket là kết nối 2 chiều lâu dài giữa client và server.
Khác HTTP thường:
HTTP: Client hỏi → Server trả lời → kết thúc
WebSocket: Client và Server giữ kết nối, hai bên gửi data liên tục
Dùng cho:
Chat realtime
Notification realtime
Game
Dashboard live
Trading chart
URL:
ws://example.com
wss://example.com
wss là WebSocket qua TLS, giống HTTPS.
Khi dùng Nginx cần config upgrade header:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
29. Database connection qua network
App kết nối DB thường cần:
Host
Port
Username
Password
Database name
SSL mode
Ví dụ PostgreSQL:
DATABASE_HOST=127.0.0.1
DATABASE_PORT=5432
DATABASE_USER=postgres
DATABASE_PASSWORD=secret
DATABASE_NAME=my_app
Lỗi hay gặp:
connection refused
timeout
password authentication failed
database does not exist
no pg_hba.conf entry
too many connections
Phân biệt:
connection refused → port không mở hoặc service không chạy
timeout → firewall/network chặn hoặc route sai
auth failed → username/password sai
database does not exist → DB name sai
too many connections → app mở quá nhiều connection
30. API Gateway / ALB / Nginx khác gì?
Nginx
Reverse proxy / web server bạn tự quản lý.
Dùng cho:
Proxy vào app
Serve static files
Rewrite URL
Redirect
Gzip
Rate limit
ALB
Load balancer layer 7 của AWS.
Dùng cho:
HTTPS termination
Route theo path/domain
Health check
Forward vào ECS/EC2
Ví dụ:
/search/* → Next.js
/api/* → Rails API
/* → Rails frontend
API Gateway
Dịch vụ quản lý API.
Dùng cho:
REST API
Auth
Rate limit
API key
Lambda integration
Request validation
31. CDN là gì?
CDN giúp cache nội dung ở nhiều location gần user.
Ví dụ:
User Việt Nam → CDN edge Singapore/Tokyo → Origin server
Dùng cho:
Image
CSS
JS
Video
Static assets
Ví dụ CloudFront, Cloudflare.
Luồng:
User → CloudFront → ALB/S3
Lợi ích:
Tăng tốc
Giảm tải origin
Chống DDoS tốt hơn
Cache static content
32. Cache-Control
Header Cache-Control quyết định browser/CDN cache bao lâu.
Ví dụ:
Cache-Control: public, max-age=31536000, immutable
Thường dùng cho file static có hash:
app-a8f3d9.js
style-c921ab.css
Với HTML thì thường không cache lâu:
Cache-Control: no-cache
Lỗi hay gặp:
Deploy code mới nhưng browser vẫn dùng JS cũ
CDN cache response API
Ảnh đổi rồi nhưng user vẫn thấy ảnh cũ
33. Rate limiting
Rate limit giới hạn số request trong một khoảng thời gian.
Ví dụ:
100 requests / minute / IP
Nếu vượt quá, server trả:
429 Too Many Requests
Dùng để chống:
Spam API
Brute force login
Crawler quá mạnh
DDoS nhẹ
Có thể làm ở:
Nginx
Cloudflare
API Gateway
Application code
Redis-based limiter
34. VPN
VPN tạo đường kết nối riêng qua Internet.
Ví dụ:
Laptop developer → VPN → Private network công ty → Server nội bộ
Dùng để truy cập:
Database staging
Admin tool nội bộ
Private server
Monitoring system
Nếu không bật VPN, bạn có thể gặp:
timeout
no route to host
DNS không resolve được internal domain
35. SSH
SSH dùng để đăng nhập server từ xa.
ssh ubuntu@1.2.3.4
Dùng private key:
ssh -i key.pem ubuntu@1.2.3.4
Port mặc định:
22
Lỗi hay gặp:
Permission denied
Connection timed out
Host key verification failed
Too many authentication failures
Debug:
ssh -v ubuntu@1.2.3.4
36. SCP / SFTP
Dùng để copy file qua SSH.
scp file.txt ubuntu@1.2.3.4:/home/ubuntu/
Copy từ server về local:
scp ubuntu@1.2.3.4:/var/log/app.log .
37. Các command mạng developer nên biết
Kiểm tra kết nối Internet
ping google.com
Kiểm tra DNS
dig example.com
nslookup example.com
Gọi API
curl -v https://api.example.com/users
Kiểm tra port có mở không
nc -vz example.com 443
Hoặc:
telnet example.com 443
Kiểm tra route
traceroute example.com
Trên Windows:
tracert example.com
Xem service đang listen port nào
ss -ltnp
Hoặc:
netstat -tulpn
Xem process dùng port
lsof -i :3000
Test TLS
openssl s_client -connect example.com:443 -servername example.com
Xem IP máy
ip addr
Hoặc:
ifconfig
Xem route table
ip route
38. Cách debug lỗi network thực tế
Khi API không gọi được, debug theo thứ tự này:
Bước 1: Domain có resolve được không?
dig api.example.com
Nếu không có IP:
DNS sai
Record chưa tạo
DNS chưa propagate
Bước 2: Port có mở không?
nc -vz api.example.com 443
Nếu fail:
Firewall chặn
Server không listen
Security Group sai
ALB listener chưa mở
Bước 3: TLS có ổn không?
openssl s_client -connect api.example.com:443 -servername api.example.com
Nếu lỗi:
Cert sai
Cert hết hạn
Thiếu chain
TLS version/cipher không hợp
Bước 4: HTTP response là gì?
curl -v https://api.example.com/health
Xem status:
200 → OK
301/302 → redirect
401/403 → auth/permission
404 → path sai
500 → app lỗi
502/503/504 → proxy/upstream lỗi
Bước 5: Xem log
Nginx access log
Nginx error log
ALB access log
App log
Database log
CloudWatch log
39. Một số lỗi thường gặp và hướng xử lý
Connection refused
Nghĩa là đến được host nhưng port không có service listen.
Nguyên nhân:
App chưa chạy
Sai port
Service bind 127.0.0.1 thay vì 0.0.0.0
Docker chưa expose port
Kiểm tra:
ss -ltnp
lsof -i :3000
Connection timed out
Nghĩa là không kết nối được trong thời gian cho phép.
Nguyên nhân:
Firewall chặn
Security Group chặn
Route sai
Server private IP không truy cập từ ngoài
VPN chưa bật
Kiểm tra:
nc -vz host port
traceroute host
Name or service not known
Nghĩa là DNS không resolve được.
Nguyên nhân:
Sai domain
DNS record chưa có
Internal domain cần VPN
/etc/hosts thiếu
SSL certificate problem
Nguyên nhân:
Certificate hết hạn
Domain không khớp certificate
Thiếu CA/intermediate cert
Client không trust CA
CORS error
Nguyên nhân:
Backend chưa allow origin
Thiếu Access-Control-Allow-Credentials
Cookie config sai
Preflight OPTIONS fail
40. Kiến trúc web production phổ biến
Một kiến trúc production thường như sau:
User Browser
↓ HTTPS
Cloudflare / CloudFront
↓ HTTPS
AWS ALB
↓ HTTP hoặc HTTPS
Nginx / App Container
↓
Rails / Node.js API
↓
RDS MySQL/PostgreSQL
Hoặc với Next.js + Rails:
User
↓
ALB
├── /_next/static/* → Next.js static
├── /search/* → Next.js
└── /api/* → Rails API
41. Network checklist khi deploy app
Trước khi release, nên kiểm tra:
Domain đã trỏ đúng chưa?
HTTPS certificate đúng chưa?
ALB listener 443 đã có chưa?
Security Group đã mở đúng port chưa?
Health check path OK chưa?
App có listen 0.0.0.0 không?
Container port mapping đúng chưa?
Database không public đúng không?
CORS config đúng chưa?
Cookie Secure/SameSite đúng chưa?
Timeout ALB/Nginx/App có hợp lý không?
Log có đủ để trace request không?
42. Mental model quan trọng cho developer
Khi gặp lỗi mạng, hãy vẽ luồng:
Client
↓
DNS
↓
CDN / Proxy
↓
Load Balancer
↓
Nginx
↓
App
↓
Database / External API
Sau đó hỏi từng đoạn:
1. Có resolve domain được không?
2. Có connect được IP/port không?
3. TLS có pass không?
4. HTTP status là gì?
5. Request có đến backend không?
6. Backend có gọi được DB/external API không?
7. Log ở đâu báo lỗi đầu tiên?
Đừng debug mù. Luôn xác định request đang chết ở đoạn nào.
43. Tóm tắt cực ngắn
Developer nên nắm chắc các khái niệm này:
IP → địa chỉ máy
Port → cổng service
DNS → domain sang IP
HTTP → giao thức web
HTTPS → HTTP có mã hóa TLS
TCP → kết nối tin cậy
UDP → gửi nhanh, không đảm bảo
Proxy → máy trung gian
Nginx → reverse proxy phổ biến
ALB → load balancer AWS
Firewall → chặn/mở traffic
NAT → đổi IP private/public
CORS → browser policy khi gọi khác origin
Cookie → lưu session/login
Timeout → lỗi do chờ quá lâu
Nếu bạn làm web/API/cloud, chỉ cần nắm chắc các phần trên là đã debug được phần lớn lỗi network thực tế.
All rights reserved