0

私はツイストにかなり慣れていないので、twisted.web.proxy.ReverseProxyResource を利用してリバース プロキシを作成しようとしています。最終的には、クライアントが SSL を使用して接続するようにしたいので、リクエストを検証して、SSL バックエンド サーバーにのみ渡します。以下の (非常に) 基本的なコードから始めていますが、SSL バックエンドに接続するのに苦労しており、ドキュメントが不足していることに気づきました。誰かが私にいくつかの良い指針、または理想的にはいくつかのサンプルコードを与えることができますか?

以下のコードでは、プレーンな HTTP サーバーにヒットすることを期待しているため、明らかに機能しません。これを「ssl」するにはどうすればよいでしょうか?

いつものように、どんな助けもとても、とても、とても感謝しています。

ありがとう

アレックス

from twisted.internet import reactor
from twisted.web import proxy, server
from twisted.web.resource import Resource

class Simple(Resource):
    isLeaf = False
    def getChild(self, name, request):
        print "getChild called with name:'%s'" % name
        #host = request.getAllHeaders()['host']
        host = "127.0.0.1"  #yes there is an SSL host listening here
        return proxy.ReverseProxyResource(host, 443, "/"+name)

simple = Simple()
site = server.Site(simple)
reactor.listenTCP(8000, site)
reactor.run()
4

1 に答える 1

0

ReverseProxyResourceTLS をサポートしていません。あなたが書くとき、ポート443ReverseProxyResource(host, 443, "/"+name)で通常のTCP接続を確立するリソースを作成していますhost.TCP接続の試行は成功しますが、TLSハンドシェイクは間違いなく失敗します.

これは現在の の制限ですReverseProxyResource: 必要な機能をサポートしていません。この機能はかなり簡単に実装できる可能性があります。が実装されて以来ReverseProxyResource、Twisted は "エンドポイント" の概念を導入しました。これにより、トランスポートにとらわれないコードを簡単に書くことができます。

ReverseProxyResource「エンドポイント」に関して機能するように更新できます (ただし、現在の API との下位互換性は維持されますが、これは Twisted で必要です)。これにより、実装がそれほど複雑になることはなく (実際には単純化される可能性があります)、エンドポイント実装が存在するあらゆる種類のトランスポート (TLS 用に 1 つあり、さらに多くの種類があります) を介してプロキシすることができます。

于 2014-11-21T01:37:10.490 に答える