
Bài 7: Cấu hình NGINX load balancing và duy trì phiên
Thiết lập upstream, kiểm tra lỗi thụ động và giới hạn retry; phân biệt định tuyến theo IP, cookie và lưu session tập trung trong cụm backend.

Dựng máy chủ mới, kiểm tra cấu hình và SELinux, thử lưu lượng trước cutover; chuẩn bị rollback khi chuyển NGINX từ CentOS Linux đã hết hỗ trợ.
Trước khi bắt đầu. Quy trình đề xuất dựng máy mới song song. Mức gián đoạn phụ thuộc DNS, VIP, kết nối đang mở và ứng dụng; không coi di trú không gián đoạn là kết quả mặc định.

Lưu ý quan trọng cho các kỹ sư hệ thống: Dự án CentOS Linux truyền thống đã chính thức dừng vòng đời phát triển (End-of-Life - EOL). Cụ thể, CentOS 8 đã kết thúc hỗ trợ vào ngày 31/12/2021 và CentOS 7 đã chính thức dừng nhận toàn bộ bản vá bảo mật từ ngày 30/06/2024.
Việc tiếp tục vận hành các cụm máy chủ NGINX Production quan trọng trên nền CentOS không còn an toàn do các kho lưu trữ chính thức đã bị đóng băng, không nhận thêm các bản vá lỗi cho các lỗ hổng bảo mật zero-day nghiêm trọng.

Để đảm bảo sự kế thừa 100% tính tương thích mã nguồn nhị phân (Bug-for-Bug Compatible) với hệ sinh thái Red Hat Enterprise Linux (RHEL), cộng đồng mã nguồn mở đã xây dựng hai bản phân phối tiêu chuẩn doanh nghiệp hàng đầu:
| Tác vụ quản trị | Lệnh trên CentOS cũ (YUM) | Lệnh chuẩn trên Rocky Linux 9 (DNF) |
|---|---|---|
| Cập nhật toàn bộ hệ thống | sudo yum update -y |
sudo dnf upgrade --refresh -y |
| Cài đặt gói NGINX | sudo yum install -y nginx |
sudo dnf install -y nginx |
| Quản lý repository | yum-config-manager --add-repo ... |
dnf config-manager --add-repo ... |
| Dọn dẹp cache gói cài | sudo yum clean all |
sudo dnf clean all |
Trên Rocky Linux 9, hệ thống bảo mật SELinux (Security-Enhanced Linux) luôn được bật ở chế độ Enforcing theo mặc định. Khi NGINX hoạt động như một Load Balancer hoặc Reverse Proxy để chuyển tiếp kết nối sang các cổng backend (ví dụ port 8080, 3000, 5000), SELinux sẽ chặn kết nối này và ghi nhận lỗi vào /var/log/audit/audit.log:
type=AVC msg=audit(...): avc: denied { name_connect } for ... comm="nginx" dest=8080 ...
Để cho phép NGINX kết nối mạng hợp lệ ra bên ngoài mà không làm tắt SELinux, bạn chỉ cần thực thi lệnh sau:
# Cho phép NGINX kết nối mạng tới các máy chủ upstream backend
sudo setsebool -P httpd_can_network_connect 1
# Xác nhận trạng thái của biến boolean
getsebool httpd_can_network_connect
Để di chuyển cụm NGINX Load Balancer từ máy chủ CentOS cũ sang máy chủ Rocky Linux 9 mới mà giảm nguy cơ gián đoạn và có đường rollback:
/etc/nginx/conf.d/ và chứng chỉ SSL từ máy chủ CentOS cũ sang máy chủ Rocky Linux mới.sudo nginx -t trên máy chủ mới để đảm bảo mọi đường dẫn và directive đều hợp lệ.sudo setsebool -P httpd_can_network_connect 1.Toàn bộ tài liệu kỹ thuật chi tiết về cấu hình Upstream, thuật toán cân bằng tải, cơ chế Failover và quản lý phiên làm việc Layer 7 đã được tích hợp đầy đủ và cập nhật trong cẩm nang:
Các mốc EOL ở trên nói về CentOS Linux, không áp dụng chung cho mọi phiên bản CentOS Stream. Trước cutover, lưu bản cấu hình và thời điểm thay DNS/VIP; giữ máy cũ sẵn sàng. Nếu tỷ lệ lỗi hoặc độ trễ vượt ngưỡng đã thống nhất, đưa lưu lượng về máy cũ và phân tích log trước khi thử lại.
Các địa chỉ example.com, IP riêng và đường dẫn trong ví dụ cần thay theo môi trường thực tế. Các sơ đồ trong bài là minh họa khái niệm, không phải bằng chứng thử nghiệm trên hệ thống của bạn.
Trước khi áp dụng: sao lưu file cấu hình bị đổi, chạy sudo nginx -t, chỉ reload khi kiểm tra thành công, rồi xác nhận endpoint, error log và chức năng ứng dụng. Nếu lỗi xuất hiện, phục hồi file đã sao lưu, kiểm tra cú pháp và reload lại; không xóa hàng loạt cấu hình để thử.

Thiết lập upstream, kiểm tra lỗi thụ động và giới hạn retry; phân biệt định tuyến theo IP, cookie và lưu session tập trung trong cụm backend.

Chọn kho gói phù hợp, cài NGINX, mở cổng web và kiểm tra dịch vụ trên Ubuntu 24.04 hoặc Rocky Linux 9. Có lưu ý riêng cho Debian và SELinux.

Cấp chứng chỉ HTTPS với Certbot, kiểm tra DNS và HTTP-01, thử gia hạn tự động và cấu hình TLS phù hợp trước khi bật HSTS.

Kiểm tra module, thư viện TLS và cổng UDP 443 trước khi bật HTTP/3; cấu hình HTTP/2 và xác nhận giao thức thực tế từ phía máy khách.