0

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

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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí