2008-10-09 41 views
11

Nhóm của tôi đang cố thiết lập proxy ngược Apache từ trang web của khách hàng vào một trong các ứng dụng web của chúng tôi.Apache - Proxy ngược và thông báo trạng thái HTTP 302

http://www.example.com/app1/some-path bản đồ để http://internal1.example.com/some-path

Bên trong ứng dụng của chúng tôi, chúng tôi sử dụng thanh chống và có redirect = set đúng về các hành động nhất định nhằm cung cấp chức năng nhất định. Thông báo trạng thái 302 từ những lần chuyển hướng này khiến người dùng thoát khỏi proxy dẫn đến trang lỗi cho người dùng cuối.

HTTP/1.1 302 Tìm thấy Location: http://internal.example.com/some-path/redirect

Có cách nào để thiết lập proxy ngược trong apache để chuyển hướng hoạt động chính xác?

http://www.example.com/app1/some-path/redirect

Trả lời

11

Có một bài viết có tiêu đề Running a Reverse Proxy in Apache dường như giải quyết được vấn đề của bạn. Nó thậm chí sử dụng cùng một example.com và/app1 mà bạn có trong ví dụ của bạn. Đi tới phần "Định cấu hình proxy" để biết các ví dụ về cách sử dụng ProxyPassReverse.

1

Hãy thử sử dụng trình kết nối AJP thay vì proxy ngược. Chắc chắn không phải là một sự thay đổi tầm thường, nhưng tôi đã thấy rằng rất nhiều cơn ác mộng URL biến mất khi sử dụng AJP thay vì proxy ngược lại.

+0

Tôi đã dành 3 giờ cố gắng tìm cách đáng tin cậy để ngăn chặn chuyển hướng http để chuyển proxy https mà không có AJP. Tôi đã kết thúc giải quyết điều này bằng cách sử dụng ajp thay vì http trong ProxyPass và ProxyPassReverse chỉ thị. – Gnafu

2

AskApache article khá hữu ích, nhưng trong thực tế, tôi đã tìm thấy kết hợp các quy tắc Ghi đè và ProxyPassReverse linh hoạt hơn. Vì vậy, trong trường hợp của bạn, tôi sẽ làm một cái gì đó như thế này:

<VirtualHost example> 
     ServerName www.example.com 

     ProxyPassReverse /app1/some-path/ http://internal1.example.com/some-path/ 
     RewriteEngine On 
     RewriteRule /app1/(.*) http://internal1.example.com/some-path$1 [P] 

     ... 
    </VirtualHost> 

Tôi thích điều này tốt hơn vì nó cung cấp cho bạn quyền kiểm soát tốt hơn trên các đường dẫn bạn đang ủy quyền cho máy chủ nội bộ. Trong trường hợp của chúng tôi, chúng tôi muốn chỉ hiển thị một phần ứng dụng của bên thứ ba. Lưu ý rằng điều này không giải quyết các liên kết được mã hóa cứng trong HTML, mà bài viết AskApache đề cập đến.

Ngoài ra, lưu ý rằng bạn có thể có nhiều dòng ProxyPassReverse:

ProxyPassReverse/http://internal1.example.com/some-path 
    ProxyPassReverse/http://internal2.example.com/some-path 

Tôi đề cập đến điều này chỉ vì một ứng dụng của bên thứ ba chúng tôi đã proxy được gửi ra trang đổi hướng không bao gồm tên máy chủ nội bộ của họ, chỉ cần một cổng khác.

Lưu ý cuối cùng, xin lưu ý rằng Firebug cực kỳ hữu ích khi gỡ lỗi chuyển hướng.

Các vấn đề liên quan