1. Mục tiêu của bài này
Bài này nhằm xây dựng một cấu hình Reverse Proxy tối thiểu nhưng đúng chuẩn production cho một website, làm mẫu chung để:
Nhân rộng cho hàng trăm website khác.
Hiểu rõ vai trò của từng directive.
Tránh các cấu hình “mạnh nhưng rối”.
Sau bài này, người đọc sẽ:
Nắm được cấu trúc một file cấu hình website chuẩn.
Hiểu rõ luồng request từ client đến backend.
Sẵn sàng mở rộng sang HTTPS, nhiều backend và failover.
2. Kịch bản ví dụ
Giả sử có website:
Domain:
example.comBackend chạy tại:
IP:
10.10.10.66Port:
80
Backend sử dụng HTTP nội bộ.
Reverse Proxy:
IP:
192.168.1.88Nhận request từ Internet qua port 80.
3. Tạo file cấu hình website
3.1. Tạo file trong sites-available
3.2. Cấu hình server block cơ bản
server { listen 80; server_name example.com www.example.com;
location / { proxy_pass http://10.10.10.66:8080;
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }}
4. Kích hoạt website
Tạo symlink:
Kiểm tra:
Reload:
5. Giải thích chi tiết cấu hình
5.1. listen 80
Nginx lắng nghe cổng 80 (HTTP).
HTTPS sẽ cấu hình ở bài sau.
5.2. server_name
Xác định domain mà server block này xử lý.
Có thể khai báo nhiều domain.
5.3. location /
Áp dụng cho toàn bộ request.
Có thể chia nhỏ theo path ở các bài nâng cao.
5.4. proxy_pass
Chuyển request đến backend.
Backend chỉ cần biết HTTP nội bộ.
5.5. Các header bắt buộc phải có
Các dòng:
proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;
Giúp backend:
Nhận đúng domain người dùng truy cập.
Lấy được IP thật của client.
Biết request gốc là HTTP hay HTTPS.
Thiếu các header này là lỗi rất phổ biến.
6. Kiểm tra hoạt động
6.1. Truy cập từ trình duyệt
Nếu website hiển thị bình thường:
Reverse Proxy hoạt động đúng.
6.2. Kiểm tra log
Kiểm tra:
Request có vào Nginx không.
Có lỗi proxy hay không.
7. Chuẩn hóa để nhân rộng
Đây là mẫu cấu hình chuẩn cơ sở, có thể:
Copy cho website khác.
Chỉ cần thay:
server_nameIP và port backend.
Khuyến nghị:
Mỗi website một file.
Không gộp nhiều website vào một file.
8. Những lỗi thường gặp
Quên symlink sang
sites-enabled.Sai IP hoặc port backend.
Backend không lắng nghe IP private.
Thiếu header proxy.
Restart Nginx thay vì reload.
9. Kết luận
Cấu hình Reverse Proxy cơ bản cho một website:
Không phức tạp,
Nhưng là nền móng cho toàn bộ hệ thống.
Nếu làm đúng từ bước này:
Việc thêm HTTPS,
Thêm Cloudflare,
Thêm failover,
sẽ rất rõ ràng và an toàn.
- Đăng nhập để gửi ý kiến