【发布时间】:2015-07-05 03:06:01
【问题描述】:
我正在尝试使用 Apache 在单独的虚拟目录中运行两个或多个 Flask 应用程序,例如 http://localhost/site1 用于 /var/www/myapps/app1 和 http://localhost/site2 用于 / var/www/myapps/app2。每个应用在 env 目录下都有自己的虚拟环境。
我从全新安装 Ubuntu 14.04 和 Apache2 (v2.4.7) 开始,使用 sudo a2dissite 000-default 删除了默认站点配置,并为我的两个应用程序添加了配置。
这是 /etc/apache2/sites-available/app1.conf 中 app1 的 conf 文件。 app2 的配置是相同的,将 app2 替换为 app1(和 site2 替换为 site1。)
<VirtualHost *:80>
ServerName localhost
WSGIProcessGroup site1
WSGIDaemonProcess site1 user=myserviceuser group=myserviceuser threads=5 python-path=/var/www/myapps/app1:/var/www/myapps/app1/env/lib/python2.7/site-packages
WSGIScriptAlias /site1 /var/www/myapps/app1/application.wsgi
WSGIScriptReloading On
<Directory /var/www/mysites/app1>
WSGIApplicationGroup site1
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
然后我用sudo a2ensite app1(和app2)启用每个站点,然后用sudo apache2ctl restart重新启动服务器。
每个应用的根目录中都有以下application.wsgi 文件:
# put a copy of this file in the root dir of each app instance
import os, sys
# activate the virtual environment
app_dir = os.path.dirname(__file__)
# removed next two lines after a comment left below
# activate_this = os.path.join(app_dir, 'env', 'bin', 'activate_this.py')
# execfile(activate_this, dict(__file__=activate_this))
sys.path.insert(0, app_dir)
from myapp import app as application
发生的情况是其中一个网站运行良好,当我点击它时,它会以正确的页面响应。另一个给了我一个 Apache 404 页面。 conf文件中没有错别字。
似乎应用程序的配置相互冲突,其中一个正在“获胜”。我花了很多时间来调整配置,但我可以让它工作的唯一方法是如果我将 localhost2 添加到我的 hosts 文件并将ServerName 更改为localhost2 在其中一个应用程序配置中,这在我的情况下是不可取的。有人可以指出配置 Apache 的正确方法吗?还是我走错了路?
理想情况下,我希望配置文件不关心使用哪个主机名来访问它们,可能会成为在负载平衡器后面运行的该服务器的多个副本。
【问题讨论】:
标签: apache ubuntu flask virtualenv