如何使用一台服务器在多个域上部署多个WSGI应用程序?

2024-10-03 11:25:43 发布

您现在位置:Python中文网/ 问答频道 /正文

假设的

  • 我有一个名为myserver的Linux VPS服务器,安装在myserver.com

  • 在这个服务器上,我有两个FlaskWSGI应用程序app-one和{}。

  • 我想在myserver上部署这两个应用程序,但我希望它们安装在app-one.com和{}域上。

  • 这些应用程序没有外部依赖性(没有数据库、缓存等)。它们是独立的单文件应用程序。

  • 我没有安装Apache、NGinX或任何其他web服务器软件;只有Python、Flask和两个WSGI应用程序。

  • 我有Python/Flask的经验,但在WSGI部署或多域工作方面我没有太多经验。基本说明和/或阅读材料。

问题/TL;DR

如何使用安装在一个域上的服务器将两个WSGI应用部署到两个域?我是否需要安装软件,尤其是在这种情况下,还是只是把应用程序指向我选择的域?在

谢谢你的建议。在


Tags: 服务器com数据库app应用程序flaskwsgivps
1条回答
网友
1楼 · 发布于 2024-10-03 11:25:43

一旦您设置了DNS,使app-one.comapp-two.com都指向myserver.com的IP地址,那么您需要设置一些东西来将来自端口80(或443,如果您要使用SSL)的请求路由到每个应用程序。这通常在Apache或{a2}中的虚拟主机上完成。在

如果您需要在同一个Python进程中运行两个应用程序(无论是否使用非Python web服务器作为应用程序容器),则需要手动向每个应用程序发送:

from werkzeug.exceptions import NotImplemented
from werkzeug.wsgi import get_host

class DomainDispatcher(object):
    """Simple domain dispatch"""
    def __init__(self, domain_handlers, default_handler=None):
        self.domain_handlers = domain_handlers
        self.default_handler = domain_handlers.get("default", default_handler)
        if self.default_handler is None:
            self.default_handler = NotImplemented()

    def __call__(self, environ, start_response):
        host = get_host(environ)
        handler = self.domain_handlers.get(host, self.default_handler)
        return handler(environ, start_response)

用法示例:

^{pr2}$

相关问题 更多 >