Giúp tôi hiểu cách sử dụng ProxyPass


11

CẬP NHẬT: Tôi đã thêm một câu hỏi sửa đổi sau khi chơi xung quanh với hai câu trả lời dưới đây.

Xin chào

Nếu bạn đang đọc điều này, có lẽ bạn đã quen thuộc với mod_proxy của Apache và chức năng ProxyPass của Apache. Giống như nhiều người khác, tôi gặp vấn đề là có một ứng dụng mà tôi có thể truy cập từ bên ngoài mạng nội bộ của chúng tôi, nhưng chính ứng dụng đó truy cập các ứng dụng nội bộ khác trên các máy khác nhau và khi bạn truy cập từ xa với thiết lập này, mọi thứ sẽ trở nên khó khăn.

Vì vậy, thiết lập của tôi rất đơn giản, tôi có:

Máy số 1 có bật truy cập từ xa, tôi truy cập nó thông qua tên máy chủ và nó cho ra ứng dụng PHP chạy trên nó.

Máy số 2 là một ứng dụng mới chạy Django, nó sử dụng một phụ trợ hoàn toàn khác (thậm chí là auth), nó được lưu trữ trên một máy riêng biệt. Trong mạng nội bộ của chúng tôi, chúng tôi truy cập nó thông qua một tên máy chủ có tên đơn giản, về cơ bản liên kết với ip 192.168.0.101 bên trong.

Tôi đã thử chơi với ProxyPass để thiết lập nó, ví dụ, một pass đến / mới sẽ gửi nó đến ứng dụng mới:

ProxyPass / mới http://192.168.0.101/

Loại công việc này, nó nhận được yêu cầu cho ứng dụng khác, nhưng nó bị hỏng vì ứng dụng Django của tôi muốn chuyển hướng đến / auth / login /, mà nó không nhận ra ngay lập tức. Nếu tôi tự sửa đổi url thành foo.net/new/auth/login, tôi nhận được trang đăng nhập của mình, nhưng như bạn có thể đoán làm điều này trong suốt quá trình duyệt không thuận tiện.

Vậy làm thế nào tôi có thể khiến ProxyPass hoạt động như tôi muốn? Tôi có cần phải làm gì đó với Apache để nó luôn luôn ghi / mới trước url trong ứng dụng khác không, hay đây là thứ tôi nên sửa đổi trong ứng dụng Django của mình?

Bất kỳ lời khuyên và con trỏ cũng sẽ được đánh giá rất cao. cảm ơn vì đã dành thời gian cho tôi

Câu trả lời:


11

Bạn nên sửa đổi ứng dụng django của mình để mong đợi ở / new / auth / login thay vì / auth / login. Nói chung, các proxy của bạn sẽ giống như vậy:

ProxyPass /path http://192.168.0.101/path
ProxyPassReverse /path http://192.168.0.101/path

Điều đó kết hợp với ứng dụng Django của bạn dự kiến ​​sẽ ở mức / mới / sẽ khắc phục các sự cố của bạn.


2

Sử dụng Virtualhost. Ví dụ: đặt tên A của máy chủ của bạn (ví dụ: sub.external.com ) thành IP máy chủ của bạn (ví dụ: 123.456.678 )

Do bảo mật, bạn cần chuyển tiếp rõ ràng HTTP_HOST nếu sử dụng ProxyPass trong settings.py , trên mỗi vé # 6880 :

USE_X_FORWARDED_HOST = True

Sau đó thêm phần sau vào Apache /etc/httpd/httpd.conf :

# Virtual hosts
Include /etc/httpd/extra/httpd-vhosts.conf

Thêm Virtualhost của bạn vào /etc/httpd/extra/httpd-vhosts.conf :

NameVirtualHosts *:80

<VirtualHost *:80>
  ServerName sub.external.com
  ProxyPass / http://127.0.0.1:8000/
</VirtualHost>

Giờ đây, bạn sẽ có thể truy cập trang web của mình từ http://sub.external.com mà không phải lo lắng về "đường dẫn"


1

Cảm ơn câu trả lời của bạn, tôi đang trả lời câu hỏi của riêng mình vì nó cần một số sửa đổi sau khi chơi với điều này.

Trước hết, Ứng dụng # 2 chạy http://192.168.0.101 .. nó không chạy http://192.168.0.101/path để ProxyPass không hoạt động

Vì vậy, sau khi nói chuyện với một số người #apache từ irc, tôi thấy rằng tôi cần phải làm một cái gì đó như thế này:

RewriteCond% {HTTP_HOST} ^ app2.myremotens.com *

RewriteRule. * Http://192.168.0.101/ [P]

Những gì nó làm là gửi một quy tắc viết lại cho bất kỳ yêu cầu nào đến app2.myremotens.com để được gửi đến ip nội bộ thông qua proxy.

Điều này hoạt động phần nào nhưng có ba vấn đề:

  • Với yêu cầu đăng nhập trên tất cả các trang, Nếu tôi truy cập mọi thứ từ xa trên app2, nó sẽ chuyển hướng đến / auth / login .. tuy nhiên, do thiết lập Rewrite hiện tại, tôi nhận được một vòng lặp chuyển hướng trước khi Firefox chỉ dừng thử đường dẫn. Tôi đoán điều này có thể có liên quan đến các phương thức chuyển hướng của Django nhưng tôi không chắc lắm.

  • Nếu tôi vô hiệu hóa đăng nhập, các loại công việc, nhưng không đầy đủ. Tôi dường như có thể tìm nạp trang chỉ mục của Ứng dụng # 2 nhưng thực sự không có gì khác

  • Phương tiện tĩnh là tất cả bị hỏng, nhưng đây có lẽ là một sửa chữa đơn giản .. không phải lo lắng về nó ngay bây giờ.

Vì vậy, tôi có một vấn đề phức tạp hơn sau đó tôi tưởng tượng ... :)


Sử dụng bất kỳ cấu hình django khác với mặc định gây ra nhiều rắc rối. Gần đây, tôi đã giải quyết một vấn đề khác với django và ProxyPass trên blog của tôi: fromzerotocodehero.blogspot.com/2011/01/ Kẻ

1
Bạn đã tìm thấy bất kỳ giải pháp về điều này? Tôi có chính xác các vấn đề tương tự, đặc biệt là mất phong cách truyền thông, v.v.
viên
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.