Twisted + Django +反向代理

时间:2010-10-16 02:32:08

标签: python twisted

我正在为我的网站部署twisted作为Web服务器。我正在研究反向代理的可能性。

我现在有以下代码连接到我的django反应堆。我正在使用彗星,我意识到我绝对必须使用端口80,因此我正在研究反向代理的可能性。在这个网站上,我找到了以下示例:

# Django setup
sys.path.append("shoout_web")
os.environ['DJANGO_SETTINGS_MODULE'] = 'shoout_web.settings'

def wrapper_WSGIRootWrapper():
    # Build the wrapper first
    generic = WSGIHandler()
    def HandlerWrapper(environ, start_response):
        environ['engine'] = engine
        return generic(environ, start_response)

    # Thread and Allowing Ctrl-C to get you out cleanly:
    pool = threadpool.ThreadPool()
    pool.start()
    reactor.addSystemEventTrigger('after', 'shutdown', pool.stop)
    return wsgi.WSGIResource(reactor, pool, HandlerWrapper)
WSGIRoot = wrapper_WSGIRootWrapper()

# Reverse Proxy
class Simple(Resource):
    isLeaf = False

    def getChild(self, name, request):
        if name == "orbited":
            print "orbited"
            return proxy.ReverseProxyResource('localhost', 12345, "/"+name)
        else: 
            return WSGIRoot.getChildWithDefault(name, request)

# Attaching proxy + django 
log_dir = './.log'
if not os.path.exists(log_dir):
    os.makedirs(log_dir)
reactor.listenTCP(DJANGO_PORT, server.Site(Simple(), logPath=os.path.join(log_dir, '.django.log')))

我的麻烦是我真的不知道在第二个代码部分的else部分填写什么。我查看了twisted-src上的text_proxy,但没有实质性的例子。有帮助吗?

1 个答案:

答案 0 :(得分:1)

我不清楚为什么要使用反向代理。我认为你是出于错误的原因而试图使用正确的工具。

反向代理很有用,因为你可以像nginx这样的轻量级服务器处理成千上万的http keep-alive连接而且内存开销很小。反向代理和真实Web服务器之间的连接(在您的情况下是扭曲的)相比较少且短暂,因此您可以处理更高的负载。请注意,如果您使用长寿命的彗星连接,那么这里没有任何好处,因为您需要在两个服务器中打开连接。

您似乎想要使用它来简单地使端口80上的端口12345上的服务器可用。这不是反向代理的用途。为什么不首先绑定端口80?