【问题标题】:How to get CherryPy to listen only on a specific host如何让 CherryPy 仅在特定主机上收听
【发布时间】:2014-09-23 14:53:14
【问题描述】:

我有一个烧瓶应用程序,我想使用 CherryPy 的内置服务器进行部署。我选择了 CherryPy,这样就可以部署应用而无需反向代理(即前面的 nginx)。

我无法让 CherryPy 仅侦听单个主机名上的请求。

假设我服务于 2 个站点:test1.com 和 test2.com(并将它们设置在我的主机文件中以指向本地主机)。 我的/etc/hosts 文件:

127.0.0.1    test1.com test2.com

CherryPy 正在服务 test1.comtest2.com 没有任何服务。

我的cherrypy文件如下:

import cherrypy

from my_test_flask_app import app

if __name__ == '__main__':

    cherrypy.tree.graft(app, "/")

    cherrypy.server.unsubscribe()

    server = cherrypy._cpserver.Server()

    server.socket_host = "test1.com"
    server.socket_port = 8030
    server.thread_pool = 30

    server.subscribe()

    cherrypy.engine.start()
    cherrypy.engine.block()

以这种方式设置,我在浏览器上转到test1.com:8030,它按预期工作。

但是当我转到test2.com:8030 时,会提供相同的应用程序。我希望它不会提供任何服务,因为 CherryPy 没有设置为监听 test2.com

对我来说,CherryPy 似乎只是在侦听给定端口 (8030) 上的所有内容,并将 socket_host 部分视为其 0.0.0.0

我在这里遗漏了什么吗?我浏览了很多文档和教程,但所有事情都表明这段代码 sn-p 应该可以按我的预期工作。

谢谢

【问题讨论】:

    标签: python flask webserver wsgi cherrypy


    【解决方案1】:

    您可以通过以下方式设置您想要的内容...

    root = Root()
    RootApp = cherrypy.Application(root)
    Domain2App = cherrypy.Application(root)
    SecureApp = cherrypy.Application(Secure())
    
    vhost = cherrypy._cpwsgi.VirtualHost(RootApp,
        domains={'www.domain2.example': Domain2App,
                 'www.domain2.example:443': SecureApp,
                 })
    
    cherrypy.tree.graft(vhost)
    

    https://cherrypy.readthedocs.org/en/3.3.0/refman/_cpwsgi.html#classes

    希望这会有所帮助!

    【讨论】:

    • 谢谢!这引导我走向正确的方向。必须为烧瓶应用程序的情况做一些小修改,并在 VirtualHost 的第一个参数中插入“无”,这样它就不会为默认应用程序提供服务。
    【解决方案2】:

    您误解了套接字侦听地址 - 它们只是 IP 地址,而不是 DNS 名称。这样设置,CherryPy 只监听 localhost (127.0.0.1) - 尝试使用您的以太网/Wlan 本地地址,您应该会被拒绝连接。

    此外,您可以使用 WSGI 中间件来包装您的应用程序,该中间件检查 Host 标头的正确域,或使用 CherryPy 虚拟主机工具来检查主机标头。

    【讨论】:

    • 谢谢。虚拟主机设施是我要走的路。不知道它只是 IP 地址(socket_host 有点误导),但有道理。
    • 不,“Host” HTTP 标头是误导性命名
    猜你喜欢
    • 2020-06-10
    • 1970-01-01
    • 2020-02-06
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多