使用mod_wsgi动态托管大规模应用
我正在尝试配置一个Apache服务器,使用mod_wsgi来进行动态的多用户托管。每个用户都会有自己的一份Python应用程序,存放在/mnt/data/www/domains/[user_name]目录下,并且会有一个vhost.map文件,告诉我哪个域名对应哪个用户的目录(这个目录的名字和用户的名字是一样的)。我现在不知道如何写WSGIScriptAliasMatch这一行,以便它也能从vhost.map文件中获取路径。
我想做的事情是这样的:我的服务器上可以有不同的域名,比如www.virgilbalibanu.com或者virgil.balibanu.com,还有flaviu.balibanu.com,每个域名都属于不同的用户,而用户的名字和域名没有必要有直接的联系。我想这样做是因为当用户创建账户时,会得到像virgil.mydomain.com这样的子域名,但如果他有自己的域名,可以在之后把它改成自己的域名,比如www.virgilbalibanu.ro,这样我只需要在vhost.map文件中修改一行就可以了。
到目前为止,我有这样的内容:
Alias /media/ /mnt/data/www/iitcms/media/
#all media is taken from here
RewriteEngine on
RewriteMap lowercase int:tolower
# define the map file
RewriteMap vhost txt:/mnt/data/www/domains/vhost.map
#this does not work either, can;t say why atm
RewriteCond %{REQUEST_URI} ^/uploads/
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/media/uploads/$1
#---> this I have no ideea how i could do
WSGIScriptAliasMatch ^([^/]+) /mnt/data/www/domains/$1/apache/django.wsgi
<Directory "/mnt/data/www/domains">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<DirectoryMatch ^/mnt/data/www/domains/([^/]+)/apache>
AllowOverride None
Options FollowSymLinks ExecCGI
Order deny,allow
Allow from all
</DirectoryMatch>
<Directory /mnt/data/www/iitcms/media>
AllowOverride None
Options Indexes FollowSymLinks MultiViews
Order allow,deny
Allow from all
</Directory>
<DirectoryMatch ^/mnt/data/www/domains/([^/]+)/media/uploads>
AllowOverride None
Options Indexes FollowSymLinks MultiViews
Order allow,deny
Allow from all
</DirectoryMatch>
我知道我用mod_rewrite写的部分不太管用,具体原因我也说不清,但这暂时不是最重要的。我现在比较好奇的是,如何写WSGIScriptAliasMatch这一行,才能实现我的目标。如果能得到任何帮助,或者其他关于如何处理这个问题的想法,我将非常感激。另外,如果我能让每个网站都在wsgi守护进程模式下运行,那就更好了,虽然这不是最重要的。
谢谢,
Virgil
1 个回答
1