【问题标题】:How would you set up a python web server with multiple vhosts?您将如何设置具有多个虚拟主机的 Python Web 服务器?
【发布时间】:2010-10-06 22:45:43
【问题描述】:

有人告诉我 wsgi 是要走的路,而不是 mod_python。但更具体地说,您将如何设置您的多网站服务器环境?选择网络服务器等?

【问题讨论】:

    标签: python webserver environment wsgi


    【解决方案1】:

    Apache+mod_wsgi 是常见的选择。

    这是一个简单的示例 vhost,设置为将 /wsgi/something 的任何请求映射到应用程序(然后可以查看 PATH_INFO 以选择一个操作,或者您正在执行调度)。根 URL '/' 也被路由到 WSGI 应用程序。

    LoadModule wsgi_module /usr/local/lib/mod_wsgi.so
    ...
    
    <VirtualHost *:80>
        ServerName                  www.example.com
        DocumentRoot                /www/example/htdocs
        WSGIScriptAliasMatch ^/$    /www/example/application.py
        WSGIScriptAlias      /wsgi  /www/example/application.py
    </VirtualHost>
    

    如果您愿意,可以使用 WSGIProcessGroup 指令来分隔不同虚拟主机的处理程序。如果您需要在不同用户下运行 vhost 脚本,则需要使用 WSGIDaemonProcess 而不是嵌入式 Python 解释器。

    application.py 在运行时会将您的 WSGI 可调用留在全局“应用程序”变量中。您还可以添加一个作为主运行的页脚以与老式 CGI 兼容:

    #!/usr/bin/env python
    from mymodule import MyApplication
    
    application= MyApplication()
    
    if __name__=='main':
        import wsgiref.handlers
        wsgiref.handlers.CGIHandler().run(application)
    

    【讨论】:

    • 您不需要使用给定的 WSGIScriptAliasMatch 来安装在网站的根目录。您仍然可以使用 WSGIScriptAlias,只需将第一个参数设为 '/'。 WSGIScriptAliasMatch 实际上很少使用。
    【解决方案2】:

    我建议将 Nginx 用于 Web 服务器。快速且易于设置。

    您可能希望每个虚拟主机拥有一个 unix 用户 - 因此每个主目录都拥有自己的应用程序、python 环境和服务器配置。这使您可以安全地重新启动特定应用程序,只需杀死您的虚拟主机拥有的工作进程即可。

    只是一个提示,希望对您有所帮助。

    【讨论】:

    • 我一直在寻找尝试 nginx 的理由,所以我会在我的本地机器上找到它。谢谢!
    • mod_wsgi 的守护程序模式允许您将 WSGI 应用程序委托给每个虚拟主机的不同进程,甚至在同一虚拟主机中。然后,您可以通过各种方式强制重新启动 WSGI 应用程序,而无需重新启动整个 Apache。
    【解决方案3】:

    您可以使用 Apache 和 mod_wsgi。这样,您仍然可以使用 Apache 对虚拟主机的内置支持。

    【讨论】:

      猜你喜欢
      • 2019-02-08
      • 2016-12-06
      • 2019-05-10
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 2020-01-17
      • 2014-09-04
      相关资源
      最近更新 更多