在ec2实例的不同子域上运行多个Flask应用程序

2024-10-01 15:44:35 发布

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

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

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

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

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

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

编辑:感谢您的回复

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

我遇到的问题是flaskhello应用程序是从domain.co.zahello.domain.co.za显示的。由于某些原因,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.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.za和{}

^{pr2}$

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

Tags: 实例import应用程序wsgihelloindex网站var
2条回答

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

最终成功了
有帮助的阅读: Aagudnn.net blog post Graham's answer on Google Groups。在

结果发现我的一条路径是错误的,我仍然需要设置配置文件的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>

以及

^{pr2}$

相关问题 更多 >

    热门问题