在静态URL路径后使用Twisted反向代理时没有内容渲染

1 投票
2 回答
749 浏览
提问于 2025-04-18 15:41

我想要运行一个Twisted服务器,并在不同的URL路径上提供各种服务。首先,我想在有人访问/app1这个路径时设置一个反向代理。目前我做的这个还不太行,当我访问127.0.0.1/app1时,什么都没有返回,页面是空白的,并没有报错。

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

site1 = proxy.ReverseProxyResource('127.0.0.1', 3003, '')
site2 = proxy.ReverseProxyResource('127.0.0.1', 3004, '')

root = Resource()
root.putChild("app1", site1)
root.putChild("app2", site2)


reactor.listenTCP(8090, Site(root))
reactor.run()

我已经成功做出了一个看起来像这样的东西:

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

site = proxy.ReverseProxyResource('127.0.0.1', 3003, '')    

reactor.listenTCP(8090, Site(site))
reactor.run()

但是这个只在访问127.0.0.1:8090时有效。

有没有人有什么想法?

2 个回答

0

看起来解决方案其实很简单。我只需要在路径参数后面加一个 /,这样一切就都正常显示了:

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

site1 = proxy.ReverseProxyResource('127.0.0.1', 3003, '/')
site2 = proxy.ReverseProxyResource('127.0.0.1', 3004, '/')

root = Resource()
root.putChild("app1", site1)
root.putChild("app2", site2)


reactor.listenTCP(8090, Site(root))
reactor.run()
0

反向代理只能提供后端HTTP服务器给它的内容。

因为你的代码看起来差不多是对的,所以我猜测后端HTTP服务器没有返回你期待的响应。

你可以试着用tcpdump或wireshark来查看后端生成的响应,或者使用一些特定于服务器的工具来获取更多调试信息。你也可以尝试使用一个你知道肯定会生成响应的不同后端HTTP服务器,以验证反向代理是否正常工作。

撰写回答