【问题标题】:Twisted web server behind apache - no resource foundApache 后面的 Twisted Web 服务器 - 找不到资源
【发布时间】: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


【解决方案1】:

您缺少 RewriteRule。我没有测试过,但你的问题的解决方法或多或少是这样的:

RewriteRule ^/jarvis/(.*) /$1

确保启用 mod_rewrite。

这里是我常用的参考链接:http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 2018-07-13
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    相关资源
    最近更新 更多