【问题标题】:twisted ReverseProxy connectionMade扭曲的反向代理连接
【发布时间】:2014-04-24 14:25:17
【问题描述】:

我正在尝试构建一个反向代理(带有扭曲)。反向代理侦听端口 6000-6099,并将这些端口映射到不同的内部 IP 地址。与端口建立连接后,它应该进行一些预检查,例如在集群中启动虚拟机。

例子:

PublicIP:6000 -> do pre-check -> forward traffic to InternalIP-1:6800
PublicIP:6001 -> do pre-check -> forward traffic to InternalIP-2:6800
...

我修改了一个我找到的示例here (section 'Proxies and reverse proxies')。但我无法让它工作。有人可以帮忙吗?

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

machines = {}

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

    def connectionMade(self):
        if not machines.has_key(self.request.port): # self.request.port?!
            # start new machine in cluster 
            # machines[self.request.port] = new_machine_ip

        # reverse proxy to machines[self.request.port] on port 6800
        # return proxy.ReverseProxyResource(machines[self.request.port], 6800, '/')

for port in range(6000,6100): 
    reactor.listenTCP(port, ProxyFactory())
reactor.run()

编辑:

  • 如何获取当前请求的端口?
  • 如何将流量传递到内部 IP?

【问题讨论】:

  • “无法正常工作”是什么意思?
  • 我在上面编辑了我的问题。

标签: python proxy twisted reverse-proxy


【解决方案1】:

Twisted 实际上有一个内置的ReverseProxyResource 用于此目的,其中请求对象被传递给render 方法。它可以进行扩展和修改以根据需要进行动态路由。

https://twistedmatrix.com/documents/current/api/twisted.web.proxy.ReverseProxyResource.html

simplest example is here,尽管您可以随意覆盖资源方法来进行您描述的那种检查。

Site 在此示例中是一个使用常规 HTTP 协议的工厂。

【讨论】:

    猜你喜欢
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    相关资源
    最近更新 更多