我正在为我的网站部署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,但没有实质性的例子。有帮助吗?
答案 0 :(得分:1)
我不清楚为什么要使用反向代理。我认为你是出于错误的原因而试图使用正确的工具。
反向代理很有用,因为你可以像nginx这样的轻量级服务器处理成千上万的http keep-alive连接而且内存开销很小。反向代理和真实Web服务器之间的连接(在您的情况下是扭曲的)相比较少且短暂,因此您可以处理更高的负载。请注意,如果您使用长寿命的彗星连接,那么这里没有任何好处,因为您需要在两个服务器中打开连接。
您似乎想要使用它来简单地使端口80上的端口12345上的服务器可用。这不是反向代理的用途。为什么不首先绑定端口80?