5

大量の VirtualHosts の提供に問題があり、より効率的な方法があるかどうか疑問に思っていました。

現在、Location ディレクティブを使用して、さまざまな部門からの大量のプロジェクトにサービスを提供しています。合計 19 の部門から 300 以上のプロジェクトがあります。構造は、ファイルが提供されるディレクトリを除いて、すべての Location ディレクティブで同じです。私が現在持っているのは、次のような大きなファイルです。

<VirtualHost *> 
   ServerName www.myserver.com 

   <Location /departmentA/project1> 
      AuthType Basic 
      AuthName "By Invitation Only" 
      AuthUserFile /usr/local/departmentA/project1/passwords 
      Require valid-user 
   </Location> 

   <Location /departmentA/project2> 
      AuthType Basic 
      AuthName "By Invitation Only" 
      AuthUserFile /usr/local/departmentA/project2/passwords 
      Require valid-user 
   </Location> 

   <Location /departmentB/project1> 
      AuthType Basic 
      AuthName "By Invitation Only" 
      AuthUserFile /usr/local/departmentA/project1/passwords 
      Require valid-user 
   </Location> 
</VirtualHost>

ご覧のとおり、これらの構造はパスを除いてすべて同じです。私が望むのはもちろん、部門名とプロジェクト名に変数を使用し、単一の Location ディレクティブを維持できるものです。これにより、サーバーとメモリへの負荷も軽減されると思います。

<VirtualHost *> 
   ServerName www.myserver.com 

   <Location /$1/$2> 
      AuthType Basic 
      AuthName "By Invitation Only" 
      AuthUserFile /usr/local/$1/$2/passwords 
      Require valid-user 
   </Location> 
</VirtualHost>
4

2 に答える 2

1

AuthUserFile動的な議論を受け入れるとは思わないので、具体的にそれを行う方法はわかりません。<Location>選択した言語で、ブロックのテンプレートを取得し、保護するディレクトリごとに繰り返す小さなスクリプトを作成するのが最も簡単な場合があります。例、Python で:

#!/usr/bin/python
import sys
print '<VirtualHost *:80>'
print '   ServerName www.myserver.com'
for path in sys.stdin:
    print '   <Location /%s>' % path.strip()
    print '      AuthType Basic'
    print '      AuthName "By Invitation Only"'
    print '      AuthUserFile /usr/local/%s/passwords' % path.strip()
    print '      Require valid-user'
    print '   </Location>'
print '</VirtualHost>'

標準入力で読み取る「部門 A/プロジェクト 1」形式の各行について、対応する<Location>セクションを出力します。

于 2009-03-20T22:07:18.507 に答える