Việc sử dụng ProxyPassReverse là gì


8

Định nghĩa từ apache.org nói:

Lệnh này cho phép Apache httpd điều chỉnh URL trong các tiêu đề Vị trí, Nội dung và Vị trí trên các phản hồi chuyển hướng HTTP. Điều này rất cần thiết khi Apache httpd được sử dụng làm proxy ngược (hoặc cổng) để tránh bỏ qua proxy ngược do chuyển hướng HTTP trên các máy chủ phụ trợ nằm sau proxy ngược.

Chỉ các tiêu đề phản hồi HTTP được đề cập cụ thể ở trên sẽ được viết lại. Apache httpd sẽ không viết lại các tiêu đề phản hồi khác, theo mặc định cũng sẽ viết lại các tham chiếu URL trong các trang HTML. Điều này có nghĩa là nếu nội dung proxy chứa các tham chiếu URL tuyệt đối, chúng sẽ bỏ qua proxy. Để viết lại nội dung HTML cho phù hợp với proxy, bạn phải tải và bật mod_proxy_html.

đường dẫn là tên của một đường dẫn ảo cục bộ; url là một phần URL cho máy chủ từ xa. Các tham số này được sử dụng tương tự như đối với chỉ thị ProxyPass.

Ai đó có thể vui lòng giải thích cho tôi làm thế nào nó hoạt động. Nói chung chỉ thị này làm gì?

Câu trả lời:


8

Nếu máy chủ thực sự xử lý một yêu cầu thực hiện chuyển hướng đến một URL khác trên máy chủ đó, thì lệnh sẽ ProxyPassReverseviết lại URL theo cách của máy chủ proxy ngược. Ví dụ, như được lưu ý trong tài liệu Apache , nếu:

 http://reverseproxy.com/mirror/foo/bar

được gửi (ủy nhiệm ngược) tới

 http://backend.example.com/bar

để xử lý, nhưng tại máy chủ phụ trợ, xác định rằng phải có URL chính xác quux, nghĩa là yêu cầu phải được chuyển hướng đến

 http://backend.example.com/quux

lệnh ProxyPassReverseviết lại URL (tại proxy ngược) thành

 http://reverseproxy.com/mirror/foo/quux

trước khi chuyển tiếp phản hồi chuyển hướng HTTP đến máy khách. Bằng cách này, khách hàng chỉ biết về máy chủ proxy ngược, nhưng dù sao cũng có thể đưa ra yêu cầu bắt buộc đối với URL chính xác http://reverseproxy.com/mirror/foo/quux, sau đó sẽ được đảo ngược tới máy chủ phụ trợ và xử lý như bình thường. Nói tóm lại, nó chỉ cho phép proxy ngược trả về các tiêu đề URI chính xác trên các phản hồi chuyển hướng HTTP.


Không rõ ý does a redirectnghĩa thực sự của nó là gì. Nó có phản hồi với phản hồi chuyển hướng HTTP (301/302) không?
Chris Stryczynski

Nó sẽ phản hồi với một số mã 3xx, vì lớp mã trạng thái "[t] he 3xx (Chuyển hướng) chỉ ra rằng cần phải thực hiện thêm hành động của tác nhân người dùng để thực hiện yêu cầu." Xem RFC 7231 thảo luận về chuyển hướng . Lệnh ProxyPassReversenày chỉ đơn giản đảm bảo rằng phản hồi HTTP 3xx bao gồm URI chính xác về mặt máy chủ proxy ngược.
Colt

0

Từ hướng dẫn proxy ngược Apache 2.4 :

Để đảm bảo rằng và Vị trí: các tiêu đề được tạo từ phụ trợ được sửa đổi để trỏ đến proxy ngược, thay vì quay lại chính nó, chỉ thị ProxyPassReverse thường được yêu cầu:

ProxyPass "/" " http://www.example.com/ "

ProxyPassReverse "/" " http://www.example.com/ "

Nếu bạn có Máy khách và 2 máy chủ, Proxy và Origin, trong đó Origin thực hiện công việc thực tế (tạo phản hồi) và Proxy chỉ yêu cầu proxy cho Origin, một kiến ​​trúc máy chủ tốt là khi

  1. Nguồn gốc không biết về Proxy
  2. mọi yêu cầu đều thông qua Proxy.

Nếu Origin không biết về Proxy thì có thể xảy ra rằng Origin trả về Máy khách một Chuyển hướng HTTP (HTTP 301 hoặc 302) thông qua Proxy, trỏ trực tiếp đến chính nó, Origin. Và đó là một vấn đề vì trình duyệt sẽ liên hệ trực tiếp với Origin trong vòng tiếp theo, điều này sẽ vi phạm điểm 2.

Khi các phản hồi chuyển hướng HTTP quay trở lại Proxy về phía Máy khách, Proxy có thể / nên sửa đổi các Chuyển hướng đó để Vị trí vẫn trỏ đến Proxy. Bằng cách này, một ứng dụng độc lập chạy trên Origin mà không biết về Proxy có thể tạo ra bất kỳ URL chuyển hướng nào miễn là Proxy được cấu hình tốt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.