我正在尝试在同一域下的子目录中设置两个(或更多)django应用程序,例如:
http://example.com/site1/
http://example.com/site2/
我知道,通常这样设置Apache虚拟主机可以很好地工作:
<VirtualHost *:80>
...
WSGIScriptAlias /site1 /path/to/site1.wsgi
WSGIScriptAlias /site2 /path/to/site2.wsgi
</VirtualHost>
现在,我已经验证了每个站点都是单独工作的。但是当我尝试并行运行时,Apache会将我发送到工作进程首先加载的站点。例子:
重新启动配置为服务6个线程的Apache
加载example.com/site1/,获取正确的页面
加载example.com/site2/,获取正确的页面
再重复2和3 2次。
重复刷新example.com/site1/,观察它从一个站点到另一个站点的循环。
实际上,对于任何给定数量的工作进程,不管wsgiscriptaalias指令是什么,它都会循环发送请求到它首先命中的任何一个进程的总数。无论我做什么(设置wsgiprocessgroup、守护进程模式与嵌入式模式或指令),它都会继续显示这种行为。
如果有人能指出我在这里做错了什么,那就太惊人了!
最佳答案:
我在一个Apache安装程序上运行了多个WSGi应用程序,并且发现最简单的方法就是拥有多个进程组——每个进程组一个。
另一个缺点是,与实际试图让一个进程同时运行两个(或更多)应用程序相比,这可能会使用一点驻留内存,而不是你能摆脱的内存。但这样可以让他们很好地分开,避免麻烦。这可能不关你的事(不是我的事)。
(可能也没那么糟糕,他们可能会分享很多文本页面?这只是一个闲置的猜测;我没有以任何方式验证这一点,因为我的设置根本没有耗尽内存)
下面是我的httpd.conf的一些片段,大约是:
WSGIDaemonProcess khdx_wsgi user=galdosd group=galdosd maximum-requests=10000
WSGIScriptAlias /khdx /home/galdosd/khdxweb/rel/khdx/apache/django.wsgi
<Location /khdx>
WSGIProcessGroup khdx_wsgi
</Location>
WSGIDaemonProcess sauron_wsgi user=galdosd group=galdosd maximum-requests=10000
WSGIScriptAlias /sauron /home/galdosd/finalsauronweb/django-root/apache/django.wsgi
<Location /sauron>
WSGIProcessGroup sauron_wsgi
</Location>