【问题标题】:Running multiple Flask apps on different subdomains of an ec2 instance在 ec2 实例的不同子域上运行多个 Flask 应用程序
【发布时间】:2013-01-08 18:05:00
【问题描述】:

我有一个 Amazon EC2 实例运行我用 Flask 构建的动态网站。

我不确定在同一个 ec2 实例上运行不同 webapp 的最佳方式是什么。我在这里阅读了有关应用程序调度的信息:http://flask.pocoo.org/docs/patterns/appdispatch/ 和有关 Apache2 虚拟主机的信息:http://blog.agdunn.net/?p=162

我想在 ec2 实例上运行我的主网站 www.mydomain.com(我已经在工作了),然后链接到我构建的其他 Flask 应用程序,例如在 www.subdomain.mydomain.com 上。

这可以通过使用虚拟主机还是在 wsgi 层使用应用程序调度来完成?如果是这样,哪个更好?

一如既往地非常感谢您的帮助和建议。

编辑:感谢您的回复

现在我正在尝试运行主站点,这是一个存储在 var/www/mysite 中的烧瓶应用程序,位于主域 domain.co.za 之外,另一个应用程序位于 var/www/flaskhello/flaskhello 中,位于子域 hello.domain.co.za 之外。目前,测试子域应用程序只是一个烧瓶 hello world 应用程序。我有如下指定的 apache2 配置文件和 wsgi 文件。

我遇到的问题是 domain.co.zahello.domain.co.za 都显示了 flaskhello 应用程序。出于某种原因,var/www/flaskhello/flaskhello/index.wsgi 文件似乎优先于var/www/mysite/index.wsgi,并且只有我对其中的sys.path.insert... 行所做的更改似乎才有效。

编辑 2

现在我已经阅读了this Google Groups thread,这与我正在尝试做的事情类似,但使用的是 DJango。仍然没有成功,但这让我们想知道WSGIApplicationGroup %{GLOBAL} 是否是导致问题的原因。我尝试对此进行一些更改,但我不完全确定自己在做什么,也找不到任何关于如何在 WSGI 中使用 ApplicationGroups 的好的文档。

再次感谢您的帮助。

--

我有以下文件

etc/apache2/sites-enabled/019-domain.co.zaetc/apache2/sites-available/domain.co.za

<VirtualHost *:80>
     WSGIDaemonProcess index
 WSGIScriptAlias / /var/www/mysite/index.wsgi

 <Directory /var/www/index>
        WSGIProcessGroup index
    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Allow from all
 </Directory>
</VirtualHost>

etc/apache2/sites-enabled/018-hello.domain.co.zaetc/apache2/sites-available/hello.domain.co.za

<VirtualHost *:80>
 WSGIScriptAlias / /var/www/flaskhello/flaskhello/index.wsgi

 <Directory /var/www/index>
        WSGIProcessGroup index
    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Allow from all
 </Directory>
</VirtualHost>

var/www/mysite/index.wsgi

import sys
sys.path.insert(0,'/var/www/mysite')

from index import app as application

var/www/flaskhello/flaskhello/index.wsgi

import sys
sys.path.insert(0,'/var/www/flaskhello/flaskhello')

from index import app as application

【问题讨论】:

    标签: python dns apache2 flask


    【解决方案1】:

    终于搞定了
    有用的阅读: Aagudnn.net blog post Graham's answer on Google Groups

    原来我的路径之一是错误的blush,我仍然需要设置配置文件的 ServerName 和 ServerAlias 部分。此外,我不能为两个单独的 DaemonProcesses 使用相同的名称。

    现在一切正常。

    我的最终配置文件:

    <VirtualHost *:80>
        ServerName www.domain.co.za
        ServerAlias domain.co.za
             WSGIDaemonProcess www.domain.co.za
         WSGIScriptAlias / /var/www/mysite/index.wsgi
         <Directory /var/www/mysite/index>
                WSGIProcessGroup index
            WSGIApplicationGroup %{GLOBAL}
            Order deny,allow
            Allow from all
         </Directory>
    </VirtualHost>
    

    <VirtualHost *:80>
    ServerName www.hello.domain.co.za
        WSGIDaemonProcess www.hello.domain.co.za
     WSGIScriptAlias / /var/www/flaskhello/flaskhello/index.wsgi
     <Directory /var/www/flaskhello/flaskhello>
            WSGIProcessGroup www.hello.domain.co.za
        Order deny,allow
        Allow from all
     </Directory>
    </VirtualHost>
    

    【讨论】:

      【解决方案2】:

      这是绝对可行的。如果您计划使用不同的域,您当然需要使用虚拟主机,并且您可能想要研究 virtualenv 以分离应用程序 python 堆栈(甚至 LXC 容器以提高安全性)。如果您打算使用不同的应用程序,那么它们将具有单独的调度命名空间,因此您必须使用不带 url_for 作为参数的重定向,而是使用实际的硬链接 url。这是非常典型的设置,应该很容易实现 - 当您遇到第一个具体问题时联系我们 :)

      【讨论】:

      • 感谢您的回复。我已经用我在尝试配置 apache 时遇到的更具体的问题编辑了原始答案。
      猜你喜欢
      • 1970-01-01
      • 2014-05-11
      • 2013-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      • 1970-01-01
      相关资源
      最近更新 更多