Supplement · Nginx
30 câu hỏi từ event loop đến incident
Answer ngắn gọn theo mental model → trade-off/failure → evidence; follow-up kiểm tra khả năng áp dụng.
30 câu hỏi
Architecture, config và routing
1. Master và worker process sở hữu gì?
Master parse config, bind resource và quản lifecycle; worker xử lý connection/request bằng event loop. Follow-up: reload thành công được chứng minh bằng evidence nào?
2. Event-driven có nghĩa mọi operation đều non-blocking?
Không; blocking disk/DNS/module code vẫn có thể chặn worker. Follow-up: phát hiện worker stall bằng metric/profile nào?
3. worker_connections có phải max client concurrency?
Không hoàn toàn; còn worker count, FD limit và reverse proxy dùng connection phía upstream. Follow-up: 10k client cần xấp xỉ bao nhiêu FD?
4. nginx -t chứng minh được gì?
Syntax và khả năng mở resource lúc test; không chứng minh routing semantics, upstream health hay certificate client compatibility. Follow-up: post-reload probes nào cần có?
5. Default server được chọn thế nào?
Theo listen address/port, không theo server_name đầu tiên một cách chung chung. Follow-up: request Host lạ phải nhận response gì?
6. Location precedence hoạt động ra sao?
Exact trước; longest prefix được nhớ, regex được xét theo rules; ^~ chặn regex ở level tương ứng. Follow-up: thiết kế test matrix cho /api/admin?
7. root và alias khác nhau thế nào?
root nối full URI vào path; alias thay phần location đã match. Follow-up: regex alias cần capture vì sao?
8. rewrite last khác break?
last kích hoạt location search mới; break dừng rewrite và tiếp tục context hiện tại. Follow-up: loop rewrite biểu hiện thế nào?
9. Vì sao hạn chế if trong location?
Nó thuộc rewrite module với semantics không giống imperative block; một số directive combination khó đoán. Follow-up: map thay thế use case nào?
10. proxy_pass có hoặc không URI khác gì?
Có URI sẽ thay normalized location prefix theo rules; không URI thường chuyển URI hiện tại. Follow-up: biến trong proxy_pass đổi resolution ra sao?
Upstream, resilience, TLS và cache
11. least_conn luôn tốt hơn round-robin?
Không; connection length không luôn đại diện work/cost, và traffic nhỏ dễ imbalance. Follow-up: benchmark bằng workload nào?
12. Passive health check có giới hạn gì?
Chỉ học từ request thật và failure conditions; node lỗi có thể vẫn nhận traffic thăm dò. Follow-up: max_fails/fail_timeout trade-off?
13. Upstream keepalive mang lại gì?
Giảm TCP/TLS handshake và latency nhưng giữ connection/FD, cần protocol/header đúng. Follow-up: backend đóng idle connection gây symptom gì?
14. proxy_read_timeout có phải total response timeout?
Không; nó đo khoảng im lặng giữa các read operation. Follow-up: slow trickle response có thể kéo dài bao lâu?
15. Khi nào retry gây duplicate side effect?
Backend có thể đã commit nhưng response mất; retry POST sang node khác lặp hành động. Follow-up: idempotency key đặt ở layer nào?
16. Buffering tác động thế nào?
Tách tốc độ client/upstream và giải phóng backend sớm, đổi lại memory/temp disk; off phù hợp streaming nhưng giữ upstream lâu. Follow-up: đo temp disk saturation?
17. Vì sao timeout phải có budget end-to-end?
Nhiều hop/attempt cộng dồn; timeout ngoài phải đủ cho trong nhưng vẫn bound theo SLO. Follow-up: cancellation truyền xuống backend thế nào?
18. SNI và Host khác vai trò?
SNI tham gia TLS certificate selection trước HTTP; Host route HTTP virtual server/request. Follow-up: mismatch test bằng openssl/curl?
19. HTTP/2 có loại bỏ backend saturation?
Không; multiplex giảm client connections nhưng streams vẫn tạo concurrent backend work. Follow-up: limit/bulkhead đặt ở đâu?
20. Cache key sai nguy hiểm thế nào?
Thiếu host/query/auth dimension có thể cross-tenant data leak; thừa dimension làm giảm hit ratio. Follow-up: test hai identity thế nào?
21. proxy_cache_lock giải quyết gì?
Coalesce concurrent miss cho cùng key, giảm thundering herd. Follow-up: lock timeout gây origin traffic ra sao?
22. Serving stale là đúng hay sai?
Là availability trade-off; đúng khi bounded freshness và endpoint cho phép, sai với dữ liệu nhạy thời gian. Follow-up: stale-if-error SLO?
Security, observability và operations
23. limit_req rate, burst, nodelay nghĩa gì?
Rate là tốc độ trung bình; burst là excess capacity; nodelay cho burst qua ngay thay vì delay. Follow-up: chọn key cho API multi-tenant?
24. Khi nào $remote_addr là client thật?
Khi không qua proxy hoặc realip chỉ trust proxy CIDR đã kiểm soát và header bị overwrite. Follow-up: direct spoof test?
25. limit_conn theo IP có nhược điểm gì?
NAT gom user, IPv6/privacy phân tán identity; connection không phản ánh HTTP/2 streams. Follow-up: app-level quota bổ sung gì?
26. Log tối thiểu cho upstream incident?
Request ID, status, request time, upstream addr/status/connect/header/response time, bytes và cache status. Follow-up: multiple attempts được biểu diễn thế nào?
27. 499 nói lên điều gì?
Client đóng connection trước response; nguyên nhân có thể timeout ở proxy/client hoặc user abort, không tự động quy lỗi client. Follow-up: correlate trace ra sao?
28. CPU thấp nhưng latency cao có thể vì sao?
Queue/listen backlog, FD limit, upstream wait, slow client, DNS, temp disk hoặc locks. Follow-up: tìm queue đầu tiên tăng thế nào?
29. Graceful reload hoạt động thế nào?
Master validate/open resource, spawn generation mới; old worker ngừng accept và drain. Apply fail thì config cũ tiếp tục. Follow-up: WebSocket ảnh hưởng old worker?
30. Runbook thay certificate không downtime?
Stage atomically, nginx -t, reload, verify fingerprint/SNI/protocol và monitor generations/errors; giữ rollback artifact. Follow-up: key permission sai được bắt lúc nào?