2009-03-20 5 views
5

OK. Я в значительной степени apache HTTPD noob, поэтому, пожалуйста, со мной.Пусть Apache обслуживает несколько каталогов через один <Location>

У меня проблема с обслуживанием большого количества VirtualHosts, и мне было интересно, есть ли более эффективный способ делать что-то.

В настоящее время я использую директиву «Место» для работы с проектами большого объема из разных отделов, более 300 проектов из 19 отделов. Структуры одинаковы для каждой директивы 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> 

Как вы можете видеть все эти структуры являются одинаковыми для дорожкам, кроме. Я бы хотел, конечно, что-то, где я могу использовать переменные для названий отделов и проектов и просто поддерживать единую директиву. Я предполагаю, что это также менее тяжело на сервере и в памяти.

Любая помощь очень ценится.

ответ

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

Для каждой строки вида «departmentA/project1» он считывает из стандартного ввода, он выводит соответствующий раздел <Location>.

+0

Hi. Я понимаю, что вы говорите. Однако я не совсем понимаю, как это интегрировать. Вы имеете в виду, что Apache может вызывать это в режиме реального времени или вы имеете в виду, что мне нужно генерировать каждое местоположение заранее? – Luke

+0

Нет, Apache не может сделать это автоматически. Вам нужно запустить его для восстановления конфигурации Apache каждый раз, когда вы хотите изменить набор защищенных мест (а затем вам нужно перезагрузить Apache). Я не думал, что это не то, что вам нужно делать часто. –

3

Вы пробовали <LocationMatch> directive?

Требуется регулярное выражение вместо пути. В зависимости от ваших путей и связанных с ними подпараметров вы можете сократить сотни директив до более управляемой части их.

+0

Но будет ли LocationMatch передавать эти переменные на AuthUserFile? И если да, то как? – Luke

 Смежные вопросы

  • Нет связанных вопросов^_^