2012-06-12 6 views
5

ポート9090にリスナーを設定し、9090で受信した各リクエストにHost:test.hostのようなヘッダーを追加して、8080に送信することはできますか?werkzeugや他のpythonリクエストフレームワークを使用して非常に単純なHTTPプロキシを作成するには?

おかげ

編集:私は、ホスト名を適用し、今のリバースプロキシと一緒に行きました。入って来ポートへの要求

+0

Apacheのmod_proxyなど、既存のプロキシを使用できないのはなぜですか?あなたのWebサーバーには、実装する必要のある機能がありませんか? –

+0

@jd mod_proxyをデフォルトのapacheポートだけでなく、さまざまなポートにリッスンする方法を教えてください。とにかく多くの人に耳を傾けるようなことはありません。 – rapadura

答えて

4

ツイストは、あなたができたリバースプロキシの実装があります。ニーズに合わせて変更してください。例hereを見ることができます。 twisted.web.proxyのソースコードを見ると、 'Host:'ヘッダーはReverseProxyRequest.processに設定されているので、サブクラス化して独自のヘッダーを設定することができます。

1

Webアプリケーションだけが知ることができるパラメータ(Webアプリケーションのカスタム認証システムでプロキシ要求を認証する必要があるなど)に基づいてプロキシ要求を調整する必要がない場合は、Webサーバーのプロキシ機能を使用する必要があります。

Apacheで例:

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

あなたはフラスコやWERKZEUGアプリケーションでプロキシものにしている場合、あなたはhttplibを使用することができますが、着信要求データに基づいて要求を作成し、応答を返す、生または変更のいずれか(例えば、リンクの書き換えのため)。それは実行可能です、私は良い代替がなかったところで使用されているそのようなプロキシを1つ持っています。その場合は、正規表現を使用してHTMLリンクを書き換えることをお勧めします。代わりにPyQueryを使用しましたが、それを正しいものにする方がはるかに簡単です。

+0

ホスト名の周りにビジネスロジックを持つ本当に悪いレガシーアプリケーションのために、ヘッダーホストを特定の値に追加または設定する必要があります。しかし、アプリケーションがモバイルデバイス上でどのように見えるかを調べたり、開発/テストをより簡単にするために(私は別のポートfeでいくつかのインスタンスを実行しています)、前もってこのプロキシーと追加ヘッダーを設定します。 – rapadura

+0

今、私は仮想ホストのセットアップをしています。そして、ちょっと醜い/ etc/hostsを使いこなす必要があります。私が言うことができる小さなpythonスクリプトを作って、ちょっと聞いて、9090でhost:header blahを追加してlocalhostに転送してください:7777は素敵でしょう、そして私はprivateIpに行くことができました:たまには – rapadura

+1

私は参照してください。次に、小さなWebアプリケーションがおそらく行く方法です。私は@ mensiの答えは最高のものだと思うが、TwistedよりもWerkzeugを好むのはそれほど難しくないはずだ。 –

関連する問題