我将要运行多个子域,最终太多以至于每个都有自己的configuration文件。 我有我想要他们的虚拟主机,所以每个子域有自己的文件夹例如/networking/testing将为该子域的网页。 我想每个子域都有自己的SVN和trac项目,例如http://test.mastersiege.com/trac问题是你不能在apache中使用variables。
<Location /trac> SetHandler mod_python PythonInterpreter main_interpreter PythonHandler trac.web.modpython_frontend PythonOption TracEnv /var/trac/$1 PythonOption TracUriRoot /trac </Location>
其中$ 1 =子域。 我不能sym链接trac文件夹到子域主文件夹,然后使用vhost_alias的文档根作为TracEnv。 我试图编写一个Perl脚本的Apacheconfiguration文件,从URLparsing子域非常像dynamic使用mod_perl在Vhost容器内使用URL,但它没有工作
use Apache2::ServerRec () ; use Apache2::ServerUtil (); use Apache2::RequestRec (); use Apache2::RequestUtil (); use Apache2::Const qw/OK DECLINED/; my $s = Apache2::ServerUtil->server; $s->push_handlers(PerlHeaderParserHandler => sub { my($r) = @_; if ( $r->hostname =~ m/(.*)\.([^.]+\.\w+)$/ ) { my($subdomain,$domain) = ($1,$2); my($TracPath) = "TracEnv /srv/trac/"+$subdomain; my($TracUri) = "TracUriRoot /testTrac"; $Location{"/testTrac/"} = { SetHandler => "mod_python", PythonInterpreter => "main_interpreter", PythonHandler => "trac.web.modpython_frontend", PythonOption => $TracPath, PythonOption => $TracUri }; if ( $@ ) { warn $@ } return OK; } else { return DECLINED; } }); </Perl>
这是我第一次perl脚本,所以我不确定..可以使用cgi trac这将解决问题,但它的约100倍,然后mod_python
我会将mod_python更改为mod_wsgi。 在这个configuration中,你可以用一个envvariables来设置TRAC_PATH。
一些摘录自示例静态configuration:
WSGIDaemonProcess tracproc user=www-data group=www-data processes=1 threads=25 WSGIProcessGroup tracproc <Directory /srv/wsgi> WSGIProcessGroup tracproc Order deny,allow Allow from all WSGIApplicationGroup %{GLOBAL} </Directory> <Location /trac> Require valid-user AuthType Basic ... </Location> WSGIScriptAlias /trac /srv/wsgi/trac-stable.wsgi RewriteCond %{REQUEST_URI} ^/trac/ [OR] RewriteCond %{REQUEST_URI} ^/trac$ RewriteRule . - [E=trac.env_path:/srv/tracenv]
你将不得不testing和解决如何获得RewriteRule中的子域或域到[E = …]。
( [E=trac.env_path:%1] 。我不确定是否可以使用其他envvariables,例如[E=trac.env_path:%{HTTP_HOST}] ,文档里没有说这个,我想你应该可以做到的,如果没有的话,那么RewriteRules可能会有更多的魔力。
trac-stable.wsgi供参考:
import sys sys.stdout = sys.stderr # when Trac is not in default python sitedir #import site #site.addsitedir('/opt/trac-0.11/lib/python2.5/site-packages') __requires__ = 'Trac=0.11.6' from pkg_resources import load_entry_point import os os.environ['PYTHON_EGG_CACHE'] = '/srv/python_eggs' os.environ['LC_TIME'] = 'pl_PL.UTF-8' import trac.web.main application = trac.web.main.dispatch_request
后来的想法 – 如果不能使用[E=trac.env_path:%{HTTP_HOST}]那么你可以通过envvariables传递你所需要的,并在trac-stable.wsgi中构buildenv.env_path。