複数のサブドメインを実行しますが、最終的には多すぎて、それぞれが独自の構成ファイルを持つことができなくなります。私はvhostsを希望どおりに動作させているので、各サブドメインには、そのサブドメインのWebページを提供する/ web/testなどの独自のフォルダーがあります。各サブドメインに独自のSVNとtracプロジェクト(http://test.mastersiege.com/tracなど)を持たせたいのですが、問題はApacheで変数を使用できないことです。
<Location /trac>
SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv /var/trac/$1
PythonOption TracUriRoot /trac
</Location>
ここで、$ 1 =サブドメイン。そして、tracフォルダーをサブドメインのホームフォルダーにシンボリックリンクしてから、vhost_aliasのドキュメントルートをTracEnvとして使用することはできません。次のようにURLからサブドメインを解析するPerlスクリプトをApache構成ファイルに記述しようとしました 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 ( [email protected] ) { warn [email protected] }
return OK;
} else {
return DECLINED;
}
});
</Perl>
それは私の初めてのPerlスクリプトなので、よくわかりません。問題を解決するtracにcgiを使用することは可能ですが、mod_pythonよりも約100倍遅くなります。
Mod_pythonをmod_wsgiに変更します。この構成では、環境変数を使用してTRAC_PATHを設定できます。
サンプルの静的構成からの抜粋:
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]
RewriteRuleのサブドメインまたはドメインを[E = ...]に取得する方法をテストして解決する必要があります。
Envを設定するときにpatternからの後方参照を使用できます([E=trac.env_path:%1]
など。[E=trac.env_path:%{HTTP_Host}]
などの他のenv変数を使用できるかどうかはわかりませんが、ドキュメントにはありません。これについて何か言ってください。あなたはそれができるはずだと思います。そうでない場合は、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}]
を使用できない場合は、env変数を使用して必要なだけ渡し、trac-stable.wsgi内にenv.env_pathを作成できます。