Website được thiết kế tối ưu cho thành viên chính thức. Hãy Đăng nhập hoặc Đăng ký để truy cập đầy đủ nội dung và chức năng. Nội dung bạn cần không thấy trên website, có thể do bạn chưa đăng nhập. Nếu là thành viên của website, bạn cũng có thể yêu cầu trong nhóm Zalo "CNTT" các nội dung bạn quan tâm.

Bài 9. Cấu hình Reverse Proxy cơ bản cho một website

ICT

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.com

  • Backend chạy tại:

    • IP: 10.10.10.66

    • Port: 80

  • Backend sử dụng HTTP nội bộ.

Reverse Proxy:

  • IP: 192.168.1.88

  • Nhận request từ Internet qua port 80.


3. Tạo file cấu hình website

3.1. Tạo file trong sites-available

 
vim /etc/nginx/sites-available/example.com.conf

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:

ln -s /etc/nginx/sites-available/example.com.conf \
     /etc/nginx/sites-enabled/

Kiểm tra:

nginx -t

Reload:

systemctl reload nginx

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

proxy_pass http://10.10.10.66:80;
  • 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

 
http://example.com

Nếu website hiển thị bình thường:

  • Reverse Proxy hoạt động đúng.


6.2. Kiểm tra log

 
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.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_name

    • IP 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

  1. Quên symlink sang sites-enabled.

  2. Sai IP hoặc port backend.

  3. Backend không lắng nghe IP private.

  4. Thiếu header proxy.

  5. 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.