2009-03-20 4 views
5

OK。私はかなり多くのApache HTTPDのnoobだから私と一緒に裸をしてください。Apacheが単一のディレクトリで複数のディレクトリを提供するようにする<Location>

私は大量のVirtualHostを提供することに問題があり、より効率的なやり方があるかどうかは疑問でした。

私は現在、ロケーションディレクティブを使用して、さまざまな部門の大量のプロジェクトを提供しています。合計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ディレクティブを1つだけ維持できる場所です。私は、これもサーバとメモリであまり重視していないと思います。

ご協力いただきありがとうございます。

答えて

1

具体的な方法はわかりません。AuthUserFileは動的引数を受け入れるとは思えません。選択した言語で、<Location>ブロック用のテンプレートを取り、防御したい各ディレクトリに対してそれを繰り返す小さなスクリプトを書くのが最も簡単かもしれません。例は、Pythonで:それは標準入力に読み出しフォーム「departmentA/Project1の」の各ラインについて

#!/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>' 

、対応する<Location>部をプリントアウト。

+0

こんにちは。私はあなたが言っていることを理解しています。しかし、私が得意でないことは、これをどのように統合するかです。 Apacheがこれをリアルタイムで呼び出すことができるということを意味しているのでしょうか、またはすべての場所を先に生成しなければならないということですか? – Luke

+0

いいえ、Apacheは自動的にこれを行うことはできません。保護された場所のセットを変更する(そしてApacheを再ロードする必要がある)たびに、Apacheの設定を再生成するために、この設定を再実行する必要があります。私はそれがあなたが頻繁に行う必要がある種類のものではないとは思わなかった。 –

3

<LocationMatch> directiveを試しましたか?

パスの代わりに正規表現を使用します。あなたのパスとそれに関連するサブオプションに応じて、何百ものディレクティブを管理しやすくすることができます。

+0

しかし、LocationMatchはそれらの変数をAuthUserFileに渡すことができますか?そしてもしそうなら、どうですか? – Luke

関連する問題