我在虚拟主机configuration文件的Apache <Directory>
上下文中有一个相当长的授权configuration指令块。
它具有LDAP凭据和一个复杂的filter,在vhostconfiguration文件中重现会很烦人。
这是一个简单的例子:
ServerName server.domain.com DocumentRoot /var/www/server.domain.com <Directory /var/www/server.domain.com/> AllowOverride FileInfo Options +ExecCGI # PASSWORD PROTECT AuthType Basic AuthBasicProvider ldap file AuthName "INTERNAL" AuthLDAPURL ldap://xxx AuthLDAPBindDN uid=xxx,cn=xxx AuthLDAPBindPassword xxx AuthzLDAPAuthoritative on AuthUserFile /var/www/server.domain.com/.htpasswd Require valid-user </Directory> Alias /alias1 /var/www/alias1.domain.com <Directory /var/www/alias1.domain.com> # ? </Directory> Alias /alias2 /var/www/alias2.domain.com <Directory /var/www/alias2.domain.com> # ? </Directory> Alias /alias3 /var/www/alias3.domain.com <Directory /var/www/alias3.domain.com> # ? </Directory> </VirtualHost>
现在,因为大部分Auth*
指令都必须在Directory
或.htaccess
上下文中使用,所以我面临着不得不重复完整的AuthType
… Require valid-user
添加每个Alias
Require valid-user
块。
我能想到的唯一方法就是将auth部分分割成单独的文件并使用Include
引用。
作为一个解决scheme, Include
将工作正常,易于维护。
有没有另外一种方式,这使得更清洁的虚拟主机configuration文件重复性较低?
以防万一在Apache中做这样的事情,在过去的15年里我还没有find。
编辑:我应该指出,我使用Alias
的原因是为了方便部署,我不想重新创build符号链接,每当我重新构buildDocumentRoot
目录。 我意识到,虽然使用符号链接和Location
将提供级联,我会寻找避免重复。
我想我遇到的问题更多的是这样一个事实,即Alias
需要一个匹配的Directory
块来限制访问。
你可以使用mod_authn_alias来分组和重用一些指令,但我认为这不会有多大帮助。 你仍然需要重复很多的指令。
根据我的经验,“ Include
解决scheme运行良好,易于维护。
你可以申请你的authnz指令到/ var / www? 这将消除需要为每个子目录分别指定它们。 如果没有的话,也许你可以把需要authnz的站点移动到一个子目录中,比如/ var / www / authnz,然后把设置只应用到那个目录。