【发布时间】:2012-12-27 16:44:45
【问题描述】:
我在 localhost 的 8001 端口和 apache2 上使用 mod_proxy 运行 twisted.web.server。 Apache根据以下配置设置为代理
http://localhost/jarvis ----> http://localhost:8001/
此规则的 httpd 配置是
ProxyPass /jarvis http://localhost:8001/
ProxyPassReverse /jarvis http://localhost:8001/
twisted 应用的服务器配置代码片段如下:
if __name__ == '__main__':
root = Resource()
root.putChild("clientauth", boshProtocol())
logging.basicConfig()
factory = Site(root)
reactor.listenTCP(8001, factory)
reactor.run()
当我去
http://localhost:8001/clientauth
它按预期运行。 但是,当我使用
http://localhost/jarvis/clientauth
它给出错误 - “没有这样的子资源。” 据我了解 - 请求已正确代理到扭曲的 Web 服务器。但是为什么不识别子资源呢?
【问题讨论】:
-
你打印出你在 Twisted 'request' 中收到的 URL 了吗?听起来它在不删除 /jarvis 的情况下将其传递给 twisted,因此您将收到整个 url
-
我们如何做到这一点?你能详细说明一下吗?
-
从头顶子类类型 twisted.web.resource.Resource 创建 Site 对象,并在 getChild() 函数中打印请求。不完全是你的追求,但你可以推断:Example
-
哦..我看到我这样做了,发现扭曲接收的路径是“//”。我需要更改我的 apache 指令以从实际 URL 中删除尾随散列。这解决了问题。然而,这会在未来产生问题吗?无论如何,非常感谢@JoeDoherty 的洞察力。
-
没问题@mlakhara。它不应该引起我可以看到的问题,但是在编写其余代码时我会牢记这一点。 :)
标签: python apache proxy twisted