2011-01-10 9 views
4

すべてのリクエストをアップストリーム/カスケードプロキシサーバーに送信する私のマシンで小さなhttpプロキシサーバーを実行したいと思います。Python twisted proxyclientカスケード/ squidへのアップストリーム

ツイストのWeb HTTPプロキシ - >イカ - >インターネット接続

残念ながら、私は上流/イカにそれらをカスケード接続し、すべてのProxyClientはリクエストを送信する方法を見つけ出すことはできません。あなたは私にヒントを与えることができますか?

このためにreactor.connectTCPとHttpClientFactoryを使用する必要がありますか、どういうわけかSquidレスポンスを指示しますか?私はツイストHTTPプロキシを取得するには、次のツイストコードサンプルを使用している

from twisted.web import proxy, http 
from twisted.internet import reactor 
from twisted.python import log 
import sys 
log.startLogging(sys.stdout) 

class ProxyFactory(http.HTTPFactory): 
    protocol = proxy.Proxy 

reactor.listenTCP(8080, ProxyFactory()) 
reactor.run() 

おかげで、

マティアス

+0

これは単なる好奇心・習得の練習ですか?あるいは、特定の目的を念頭に置いていますか? – MattH

+0

こんにちはMattH、私は2つのプロキシサーバー(2つのVirtualBox/2 VMware - 1つのネットワークインターフェイスにバインドされた各VM)を使用し、両方のインターフェイスのDSLダウンロード速度を組み合わせたいと思います。新しい接続要求ごとにプロキシをローテーションしたい(計数とローテーションIP) –

+0

ちょっとMattH、私もMultiWanをサポートすべきClearOSディストリビューションを試しましたが、両方のインターフェイスを使って接続速度が倍増しませんでした。さらに、私は新しい要求ごとにWindows 7のルーティングメトリックを変更しようとしましたが、まだOSが優先インタフェースを選択しているようです。私は2つのプロキシサーバー/ 5接続ごとに各プロキシを介して10接続のダウンロードを実行したいと思います。多くのおかげで、Mathias –

答えて

1

私は、あなたが物事を複雑にしていると思います。私にとって、あなたがしたいことは、2つのイカサービス間のラウンドロビンロードバランスHTTPプロキシリクエストであると思われます。

私がいたのであれば、1バイトのコードを書いたり、何かを棚から出したりすることはありません。あなたは、いくつかのWebサービスは、粘りの特定の種類を必要とするかもしれない、いくつかの演奏を周りに行う必要があるかもしれないが、このアプリケーションは、この点で高度な設定が可能です

global 
     daemon 
     maxconn 256 

defaults 
     mode http 
     timeout connect 5000ms 
     timeout client 50000ms 
     timeout server 50000ms 

frontend loadbal 
     bind *:3128 
     default_backend squids 
     option http_proxy 

backend squids 
     option http_proxy 
     server squid1 192.168.1.2:3128 
     server squid2 192.168.1.3:3128 
     balance roundrobin 

私は設定して、このような何かをHA-Proxyを使用したいです。 HA-Proxy v1.4は生き残り接続をサポートしているように見えます。想像できるコーナーケースのいくつかを単純化するかもしれません。

また、2つの接続を最大限に活用しようとしている場合は、2つのsquidボックスの間にICPを設定することをお勧めします。

+0

Matthさん、ありがとうございました。私はHAプロキシソフトウェアを認識していませんでした。ラウンドロビンはまさに私がやりたいことです。多くのありがとう –

+0

@mathias:あなたは[システムエンジニアリングの3つの基本ツール]に関するこの関連記事に向けて私が指している第二の人になることができます(http://teddziuba.com/2010/12/the-3-basic-tools-of -systems-engineering.html) – MattH

-1

はこれがために良いかもしれませんtwisted.web.proxy.ReverseProxyResource何かのように聞こえます。

+0

こんにちはJean-Paul、ご返信ありがとうございます。 例コードを次の行で試してみました。 site = server.Site(proxy.ReverseProxyResource( 'www.google.com'、80、 '')) このエラーメッセージが表示されるたびに、 404が見つかりません 要求されたURL /ttp%3A//www.google.com/はこのサーバー上に見つかりませんでした。 これはバグですか? –

+0

リクエストをhttp://www.google.comのホームページのみをロードするようにリダイレクトするにはどうすればよいですか?私のプロキシの場合は、site = server.Site(proxy.ReverseProxyResource(PROXY_IP、PROXY_PORT、URL_TO_REQUEST_FROM_PROXY))と書く必要がありますか?多くのおかげで、Mathias –

+0

あなたのプロキシへのリクエストを発行するクライアントは、別の種類のプロキシと話したがっていると思います。結局ReverseProxyResourceは適切ではありません。 –