我正在尝试在 Mac 服务器上配置一个 apache 服务器,以同时为 Web2Py 应用程序和 Flask 应用程序提供服务。这已成为一场轻微的噩梦。我希望用户能够访问以下网址
http:/my.domain.com/
- Web2py 网站
http:/my.domain.com/suburl
- Flask 网站
不幸的是,当我访问 suburl 时,它总是将我带到 Web2py 站点(然后因为没有名为 suburl 的应用程序而吓坏了)。这是我的
.conf
文件:
NameVirtualHost *:80
# Flask Site
<VirtualHost *:80>
ServerName my.domain.com/suburl
WSGIDaemonProcess flask-suburl user=_www group=_www
WSGIProcessGroup flask-suburl
WSGIScriptAlias /suburl /Users/myname/suburl/app.wsgi
<Directory /Users/myname/suburl>
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
# Web2py Site
<VirtualHost *:80>
ServerName my.domain.com
WSGIDaemonProcess web2py-main user=_www group=_www
WSGIProcessGroup web2py-main
WSGIScriptAlias / /Users/myname/web2py/wsgihandler.py
<Directory /Users/myname/web2py>
AllowOverride None
Order Allow,Deny
Deny from all
<Files wsgihandler.py>
Allow from all
</Files>
</Directory>
</VirtualHost>
重新排序两个 VirtualHost 定义不会做任何事情。删除 Web2py 站点允许我访问 Flask 站点。
我不想将它们组合成一个 VirtualHost,因为这会导致两个应用程序共享相同的 Python 解释器和某些 C 扩展显然会出现问题。
我更改了域和其他一些名称以隐藏受保护的信息。我还排除了一些处理为静态子文件夹提供服务的 AliasMatch 命令。在端口 443 上还有另一个用于 SSH 服务器的 VirtualHost,但我没有包括它,因为我希望它不会影响事情。
那么我到底要怎么做才能访问这两个站点,而不是 Web2py 站点吞噬一切?
对于来到这里的任何人,我已经解决了我的问题。这是一个简单的错误,我可以发誓我以前试过这个。
在 Flask 站点的配置中,我应该做的:
ServerName my.domain.com
...
WSGIScriptAlias /suburl /Users/myname/suburl/app.wsgi
注意 ServerName 的末尾不再有
/suburl
。相反,请确保已将其添加到 WSGIScriptAlias 的第一个参数中。当您查看 WSGIScriptAlias 的文档 时,推理就变得清晰了;第一个参数是被访问的 URL 路径。 ServerName 必须保持纯净。