Luk*_*uke 5 apache virtualhost
我有一个服务大量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>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,除路径外,所有这些结构都是相同的.我想要的当然是我可以使用变量作为部门和项目名称,只需维护一个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>
Run Code Online (Sandbox Code Playgroud)
我不知道有什么具体方法可以做到这一点,因为我认为不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>'
Run Code Online (Sandbox Code Playgroud)
对于它在标准输入上读取的“departmentA/project1”形式的每一行,它都会打印出相应的<Location>部分。
| 归档时间: |
|
| 查看次数: |
6051 次 |
| 最近记录: |