【问题标题】:PyWSGI (Gevent) Virtual hostsPyWSGI (Gevent) 虚拟主机
【发布时间】:2014-01-22 10:21:03
【问题描述】:

是否可以在 Gevent 的 pywsgi 服务器中托管多个站点?我有一台带有bottlepy和gevent pywsgi服务器的机器,我很好奇我将如何建立第二个站点。我唯一能想到的就是使用 nginx 之类的东西作为前端,并在不同的内部端口上运行每个 gevent 服务器/站点。这真的是解决这个问题的最佳方法吗?

【问题讨论】:

    标签: virtualhost gevent


    【解决方案1】:

    虚拟主机不是 WSGI 协议的一部分。

    如果您不想使用 nginx 或任何其他前端服务器,您可以编写或使用现有的 wsgi 中间件,该中间件将分派到多个底层 wsgi 应用程序。

    类似这样的东西(我没有测试过): http://discorporate.us/jek/projects/wfront/

    但是,wsgi 服务器主要用作应用服务器,而不是前端服务器。我会使用 nginx、apache、lighttpd 或任何其他经过良好测试的前端服务器,让它完成它的工作。 使用前端服务器的几个原因:

    • 他们检查请求完整性以确保安全
    • 他们支持 SSL
    • 它们通常更健壮
    • 它们可以充当多个 wsgi 进程的负载平衡器以进行扩展

    【讨论】:

    • 感谢您的信息,我曾考虑编写自己的方法,但认为它永远不会像 nginx 这样的强大。
    【解决方案2】:

    如果您想关注 CherryPy(作为 WSGI 服务器)和 Bottle(作为应用程序),我已经使用了一段时间,并且证明它非常稳定。

    以下是多个虚拟主机的示例。

    import cherrypy
    from bottle import Bottle
    import os
    
    
    app1 = Bottle() 
    app2 = Bottle()
    
    @app1.route('/')
    def homePage():    
        return "=========  home1 ==============="
    
    
    @app2.route('/')
    def homePage_2():    
        return "=========  home2 ==============="
    
    vhost = cherrypy._cpwsgi.VirtualHost(None, 
                                         domains={
                                                  'www.domain1.com': app1, 
                                                  'www.domain2.com': app2,
                                                 }
                                         )
    
    cherrypy.tree.graft(vhost) 
    
    cherrypy.config.update({
                            'server.socket_host': '192.168.1.4',
                            'server.socket_port': 80,
                          })
    cherrypy.engine.start()
    cherrypy.engine.block()
    

    【讨论】:

      猜你喜欢
      • 2017-10-14
      • 2010-10-07
      • 1970-01-01
      • 2018-12-27
      • 2014-09-08
      • 2012-05-27
      • 2021-02-10
      • 2011-06-19
      • 2014-11-12
      相关资源
      最近更新 更多