从一个通用的 Python Web 框架(即:塔架、涡轮齿轮等)?我知道您可以根据域或路径进行重定向,以重写 URI 以指向特定于站点的位置,而且我还看到了一些粗暴的做法”if site == 'site1' / elseif / elseif / etc“这是我想避免的。

有帮助吗?

解决方案

Django 内置了这个。看 网站框架.

作为一般技术,在数据库架构中包含一个“主机”列,附加到您想要特定于主机的数据,然后包含 Host 检索数据时查询中的 HTTP 标头。

其他提示

在 apache 上使用 Django 和 mod_python,我只需使用以下 apache 配置即可托管多个(不相关的)django 站点:

<VirtualHost 1.2.3.4>
        DocumentRoot /www/site1
        ServerName site1.com
        <Location />
                SetHandler python-program
                SetEnv DJANGO_SETTINGS_MODULE site1.settings
                PythonPath "['/www'] + sys.path"
                PythonDebug On
                PythonInterpreter site1
        </Location>
</VirtualHost>

<VirtualHost 1.2.3.4>
        DocumentRoot /www/site2
        ServerName site2.com
        <Location />
                SetHandler python-program
                SetEnv DJANGO_SETTINGS_MODULE site2.settings
                PythonPath "['/www'] + sys.path"
                PythonDebug On
                PythonInterpreter site2
        </Location>
</VirtualHost>

不需要多个 apache 实例或代理服务器。对每个站点使用不同的 PythonInterpreter 指令(您输入的名称是任意的)可以使命名空间保持独立。

我使用 CherryPy 作为我的 Web 服务器(与 Turbogears 捆绑在一起),并且我只需在绑定到本地主机的不同端口上运行 CherryPy Web 服务器的多个实例。然后,我使用 mod_proxy 和 mod_rewrite 配置 Apache,以根据 HTTP 请求透明地将请求转发到正确的端口。

在本地端口上使用多个服务器实例是一个好主意,但您不需要功能齐全的 Web 服务器来重定向 HTTP 请求。

我会用 作为反向代理来完成这项工作。它体积小、速度快、简单,并且正是我们所需要的。

英镑是什么:

  1. 反向代理:它将请求从客户端浏览器传递到一台或多台后端服务器。
  2. 负载均衡器:它将把来自客户端浏览器的请求分发到多个后端服务器,同时保留会话信息。
  3. SSL 包装器:Pound 将解密来自客户端浏览器的 HTTPS 请求,并将它们作为纯 HTTP 传递到后端服务器。
  4. HTTP/HTTPS 清理程序:Pound 将验证请求的正确性并只接受格式良好的请求。
  5. 故障转移服务器:如果后端服务器出现故障,Pound 将记录这一事实并停止向其传递请求,直到其恢复。
  6. 请求重定向器:请求可以根据请求的 URL 在服务器之间分发。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top