2009-03-20 5 views
5

OK ile birden çok dizin sunmasına izin verin. Ben hemen hemen bir apache HTTPD noob değilim, lütfen bana çıplak bakın.Apache'nin, tek bir <Location>

Çok sayıda VirtualHost hizmetinde bir sorunum var ve bir şeyler yapmanın daha etkili bir yolu olup olmadığını merak ediyordum.

Şu anda farklı departmanlardan büyük miktarlarda projelere hizmet vermek için Konum yönergesini kullanıyorum, toplamda 19 bölümden 300'ün üzerinde proje. Yapılar, dosyaların sunulduğu dizinler dışında her Yer Yönergesi için aynıdır. Bütün bu yapılar yolları hariç aynıdır görebileceğiniz gibi

<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> 

: Ne anda sahip şuna benzer büyük bir dosyadır. İstediğim şey, elbette departman ve proje isimleri için değişkenleri kullanabileceğim ve sadece tek bir Konum direktifini koruyabileceğim bir şey. Bunun sunucu ve bellekte daha az ağır olduğunu varsayalım.

Herhangi bir yardım çok takdir edilmektedir.

cevap

1

Özellikle bunu yapmak için herhangi bir yol bilmiyorum, zira AuthUserFile dinamik bir argümanı kabul etmiyor. Seçtiğiniz dilde, <Location> bloğu için bir şablon alan ve korumak istediğiniz her dizin için tekrarlayan küçük bir betik yazmak en kolay yol olabilir. Python Örnek: standart giriş okur formu 'Departmentâ/project1', her satır için,

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

, bu karşılık gelen <Location> bölümünü basar.

+0

Merhaba. Ne dediğini anlıyorum. Ancak, tam olarak anlamadığım şey, bunun nasıl entegre edileceğidir. Apache'nin bunu gerçek zamanlı olarak adlandırabileceğini mi kastediyorsunuz, yoksa her bir Lokasyonu ön tarafa üretmek zorunda olduğumu mu kastediyorsunuz? – Luke

+0

Hayır, Apache bunu otomatik olarak yapamaz. Korumalı konumlar kümesini her değiştirmek istediğinizde Apache yapılandırmasını yeniden oluşturmak için çalıştırmanız gerekir (ve daha sonra Apache'yi yeniden yüklemeniz gerekir). Sıklıkla yapman gereken bir şey olmadığını düşünmemiştim. –

3

<LocationMatch> directive'u denediniz mi?

Bir yol yerine düzenli bir ifade alır. Yollarınıza ve ilgili alt seçeneklerine bağlı olarak, yüzlerce yönergesini daha yönetilebilir bir avuç dolusuya indirgeyebilirsiniz.

+0

Ancak, LocationMatch bu değişkenleri AuthUserFile'a aktarabiliyor mu? Ve eğer öyleyse, nasıl? – Luke