2

私はツイスト ライブラリを初めて使用し、特定の機能を備えた単純なリバース プロキシを作成しようとしています。ほとんどの URL では、サーバーはリバース プロキシとして機能する必要がありますが、正規表現に一致する URL の場合は、それ自体を提供する必要があります。動的ディスパッチに関するねじれたドキュメントを読み、次のことを思いつきました。

local_urls = [
    r'...',
]

class LocalResource(Resource):
    def render(self, request):
        return "Hello World"

class LocalOrRemoteResource(Resource):
    def __init__(self, host, port, path):
        Resource.__init__(self)
        self.host = host
        self.port = port
        self.path = path

    def getChild(self, path, request):
        if any([re.match(url, path) for url in local_urls]):
            return LocalResource()
        else:
            return proxy.ReverseProxyResource(self.host, self.port, path)

root = LocalOrRemoteResource('remote.server', 80, '')
site = server.Site(root)
reactor.listenTCP(8080, site)
reactor.run()

これを実行すると、Cache-Control ヘッダー値「no-cache」を HTTP ステータス コードとして解析しようとしているときに、サーバーが ValueError にヒットします。それで、何かが非常に間違っています。

行を置き換えると:

root = LocalOrRemoteResource('remote.server', 80, '')

これとともに

root = proxy.ReverseProxyResource('remote.server', 80, '')

それは正常に動作します。

誰かが私が間違っていることを見ることができますか?

4

1 に答える 1