两个Python网站的多个虚拟主机,一个占主导

1 投票
1 回答
750 浏览
提问于 2025-04-18 11:03

我正在尝试在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>

重新排列这两个虚拟主机的定义没有任何效果。删除Web2Py网站后,我就可以访问Flask网站了。

我不想把它们合并成一个虚拟主机,因为那样会导致两个应用共享同一个Python解释器,某些C扩展似乎也会出现问题。

我已经更改了域名和其他一些名称,以隐藏敏感信息。我还省略了一些处理静态子文件夹的AliasMatch命令。此外,还有一个用于SSH服务器的虚拟主机在443端口,但我没有包括它,因为我认为它不会影响其他内容。

那么,我该怎么做才能同时访问这两个网站,而不是让Web2Py网站把所有请求都吞掉呢?

1 个回答

0

对于来到这里的朋友,我已经解决了我的问题。其实只是一个简单的错误,我本以为我之前试过这个。

在Flask网站的配置中,我应该这样做:

ServerName my.domain.com
...
WSGIScriptAlias /suburl /Users/myname/suburl/app.wsgi

注意,ServerName后面不再有/suburl了。相反,要确保这个部分已经加到WSGIScriptAlias的第一个参数里。理解这个原因可以参考WSGIScriptAlias的文档;第一个参数是正在访问的URL路径。ServerName必须保持干净。

撰写回答