Cách sử dụng Nginx làm reverse proxy

Cách sử dụng Nginx làm reverse proxy

Khác với Apache, Nginx là máy chủ web phổ biến nhất hiện có. Ngoài việc là một máy chủ web, nó cũng có thể được sử dụng như một trình cân bằng tải hoặc reverse proxy. Trong hướng dẫn này, Quantrimang.com sẽ chỉ cho bạn cách có thể sử dụng Nginx làm reverse proxy.

Reverse proxy là gì?

Một proxy server hoạt động với vai trò trung gian giữa máy khách và máy chủ khác. Proxy server lấy tài nguyên từ máy chủ mà bạn muốn kết nối và gửi nó cho bạn để xem. Một reverse proxy hoạt động theo cùng một cách, ngoại trừ vai trò bị đảo ngược. Khi bạn yêu cầu thông tin từ máy chủ, reverse proxy sẽ giữ yêu cầu và gửi nó đến máy chủ backend thích hợp. Điều này cho phép quản trị viên hệ thống sử dụng máy chủ cho nhiều ứng dụng, cũng như đảm bảo luồng lưu lượng truy cập mượt mà hơn giữa máy khách và máy chủ.

Reverse proxy là gì?

Lợi ích của reverse proxy

Tùy thuộc vào ứng dụng của bạn, bạn có thể có các trường hợp sử dụng reverse proxy khác nhau.

  • Một reverse proxy cho phép bạn chạy nhiều ứng dụng trên cùng một máy chủ - Nếu bạn có nhiều ứng dụng chạy trên cùng một máy chủ, tất cả chúng không thể “lắng nghe” cùng lúc trên cổng 80 hoặc 433. Với reverse proxy, bạn có thể cấu hình nó để chuyển hướng lưu lượng truy cập đến các ứng dụng riêng lẻ nếu cần.
  • Cân bằng tải - Nếu có nhiều máy chủ chạy cùng một ứng dụng, bạn có thể sử dụng reverse proxy để phân phối lưu lượng đều cho từng máy chủ.
  • Tường lửa ứng dụng web - Bạn có thể sử dụng reverse proxy để ẩn ứng dụng của mình và cũng để lọc IP spam hoặc bảo vệ khỏi cuộc tấn công DDOS.
  • Ghi nhật ký và kiểm tra dễ dàng - Vì tất cả lưu lượng truy cập đến được quản lý bởi reverse proxy, nên việc ghi nhật ký và giám sát luồng lưu lượng sẽ dễ dàng hơn.
 

Cấu hình Nginx làm reverse proxy

Để thiết lập Nginx làm reverse proxy, bài viết sẽ sử dụng tham số proxy_pass trong file cấu hình Nginx.

Lưu ý: Hướng dẫn này giả định rằng bạn có một số kiến ​​thức về Nginx và đã cài đặt, cũng như thiết lập Nginx trong máy chủ của bạn.

Trong hầu hết các trường hợp sử dụng, Nginx sẽ là máy chủ front-end, “lắng nghe” cổng 80 (HTTP) hoặc 443 (HTTPS) cho các yêu cầu đến. Vì chỉ có thể có một dịch vụ “nghe” trên cổng 80 hoặc 443, ứng dụng của bạn sẽ phải “nghe” trên một cổng khác, chẳng hạn như cổng 8081. Cấu hình đơn giản nhất sẽ giống như thế này:

server {
 listen 80;
 listen [::]:80;
 server_name myapp.com;
 location / {
 proxy_pass http://localhost:8081/;
 }
 }

Điều này có nghĩa là tất cả các yêu cầu đến myapp.com tại cổng 80 sẽ được chuyển hướng đến cổng 8081.

Thiết lập nâng cao

Ngoài directive proxy_pass, có một số directive khác mà bạn có thể sử dụng để thiết lập nâng cao hơn.

  • proxy_set_header - Điều này cho phép bạn đặt tiêu đề để gửi đến ứng dụng nền. Ví dụ, xem cấu hình sau:
proxy_set_header Host $host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Bạn có thể đặt tiêu đề proxy cần thiết để chuyển đến ứng dụng, cho nó biết IP yêu cầu và địa chỉ từ xa, sau đó xuất nội dung chính xác cho trang web yêu cầu.

  • proxy timeout - Điều này cho phép bạn đặt giá trị timeout (thời gian chờ) để gửi và nhận yêu cầu proxy. Ví dụ:
proxy_connect_timeout 90;
 proxy_send_timeout 90;
 proxy_read_timeout 90;
  • proxy_buffers - Điều này cho phép Nginx tạm thời giữ phản hồi của proxy server và chỉ gửi đến máy chủ yêu cầu sau khi proxy server kết thúc phản hồi. Ví dụ:
proxy_buffers 32 4k;

Nếu ứng dụng của bạn gửi một số lượng lớn file, thì bạn có thể muốn vô hiệu hóa proxy_buffers:

proxy_buffering off;

Như bạn có thể thấy, Nginx là một máy chủ reverse proxy có rất nhiều công dụng. Điểm cộng lớn nhất về nó là cấu hình đơn giản, dễ sử dụng và vẫn cho phép bạn mở rộng quy mô trong các tình huống phức tạp hơn. Để biết thêm chi tiết, bạn có thể xem tài liệu mô-đun proxy Nginx (tại https://nginx.org/en/docs/http/ngx_http_proxy_module.html) hoặc các ví dụ cấu hình (tại https://www.nginx.com/resources/wiki/start/topics/examples/full/).

Chúc bạn thực hiện thành công!

Nguồn tin: Quantrimang.com