2012-06-12 21 views
5

Có thể thiết lập trình nghe nói trên cổng 9090 và thêm tiêu đề, như Host: test.host vào mỗi yêu cầu đến trên 9090 và gửi nó lên để nói 8080 không?Làm thế nào để thực hiện proxy http rất đơn giản bằng cách sử dụng khuôn khổ yêu cầu pykzeug hoặc python khác?

Cảm ơn

EDIT: Tôi đã đi với một reverse-proxy cho bây giờ, áp dụng hostname:. Cổng để bất kỳ yêu cầu mà đi theo

+0

Điều gì ngăn cản bạn sử dụng proxy hiện tại, chẳng hạn như mod_proxy của Apache? Có các tính năng không khả dụng trong máy chủ web của bạn mà bạn cần triển khai không? –

+0

@jd Làm thế nào tôi có thể làm mod_proxy lắng nghe các cổng khác nhau, không chỉ là cổng apache mặc định? Ive đọc rằng apache không thích nghe nhiều. – rapadura

Trả lời

4

Twisted có thi hành một reverse proxy mà bạn có thể sửa đổi cho phù hợp với nhu cầu của bạn. Bạn có thể xem các ví dụ here. Nếu bạn nhìn vào mã nguồn của twisted.web.proxy, bạn có thể thấy rằng tiêu đề 'Máy chủ:' được đặt trong ReverseProxyRequest.process, vì vậy bạn có thể phân lớp nó và đặt tiêu đề của riêng bạn.

1

Trừ khi bạn cần điều chỉnh yêu cầu proxy dựa trên thông số mà ứng dụng web của bạn có thể biết (ví dụ, bạn cần xác thực yêu cầu proxy với hệ thống xác thực tùy chỉnh của webapp), bạn nên sử dụng khả năng proxy của máy chủ web của mình.

Ví dụ với Apache:

Listen 0.0.0.0:9090 
ProxyRequests off 
<VirtualHost myhost:9090> 
    ProxyPass/http://localhost:8080/ 
    ProxyPassReverse/http://localhost:8080/ 
    ProxyPassReverseCookieDomain localhost myhost 
</VirtualHost> 

Nếu bạn phải điều proxy trong một ứng dụng Flask hoặc Werkzeug, bạn có thể sử dụng httplib, tạo ra các yêu cầu trên cơ sở dữ liệu yêu cầu đến và trả lại phản hồi, hoặc sống hoặc sửa đổi (ví dụ để viết lại liên kết). Đó là doable, tôi có một proxy như vậy được sử dụng, nơi không có lựa chọn tốt. Nếu bạn làm điều đó tôi khuyên bạn nên chống lại bằng cách sử dụng biểu thức thông thường để viết lại các liên kết HTML. Tôi sử dụng PyQuery thay vào đó, nó dễ dàng hơn để làm cho nó đúng.

+0

Tôi cần phải thêm hoặc đặt Máy chủ tiêu đề thành một giá trị cụ thể, cho một ứng dụng kế thừa thực sự xấu có một loạt logic nghiệp vụ xung quanh tên máy chủ. Tuy nhiên, để kiểm tra xem ứng dụng trông như thế nào trên các thiết bị di động và để làm cho việc phát triển/thử nghiệm dễ dàng hơn (chạy một số phiên bản trên các cổng khác nhau fe), tôi muốn thiết lập proxy-and-add-header này trước nó. – rapadura

+0

Ngay bây giờ tôi có một thiết lập máy chủ ảo và sau đó tôi cần phải muck xung quanh với/etc/hosts, nó chỉ xấu xí. Thực hiện một kịch bản python nhỏ mà tôi có thể nói, hey lắng nghe trên 9090 thêm máy chủ: blah tiêu đề cho bất kỳ yêu cầu và chuyển tiếp chúng đến localhost: 7777 sẽ được tốt đẹp, sau đó tôi có thể đi đến privateIp: 9090 từ điện thoại và ứng dụng sẽ vẫn nghĩ rằng nó được phục vụ từ blah. – rapadura

+1

Tôi hiểu. Sau đó, ứng dụng web nhỏ có lẽ là cách để đi. Tôi đoán câu trả lời của @ mensi là tốt nhất nhưng bạn thích Werkzeug hơn Twisted nó không phải là rất khó. –

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