使用mod_wsgi动态托管大规模应用

1 投票
1 回答
767 浏览
提问于 2025-04-15 20:18

我正在尝试配置一个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

关于这个话题的讨论可以在这里找到:

http://groups.google.com/group/modwsgi/browse_frm/thread/2a9905f24c10a967

撰写回答