<Directory>
我在虚拟主机配置文件中的 Apache 上下文中有一个相当长的授权配置指令块。
它有 LDAP 凭据和一个复杂的过滤器,在 vhost 配置文件中重现会很麻烦。
这是一个简化的例子:
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
我能想到的避免这种情况的唯一方法是将 auth 部分拆分为单独的文件并使用 引用该文件Include
。
作为一种解决方案,它将Include
运行良好并且易于维护。
还有其他方法可以做到这一点,从而减少重复,使 vhost 配置文件更简洁吗?
万一 Apache 中有一种很好的方法可以做到这一点,而我在过去 15 年里没有发现过!
编辑:我应该指出,我使用的原因Alias
是为了便于部署,我不想每次重建该DocumentRoot
目录时都必须重新创建符号链接。但我意识到使用符号链接Location
会提供我所寻找的级联以避免重复。
我想我遇到的问题更多地与Alias
需要匹配的Directory
块才能限制访问这一事实有关。
答案1
你可以使用mod_authn_alias可以对一些指令进行分组和重复使用,但我认为这没什么用。你仍然需要重复执行许多指令。
根据我的经验,该Include
解决方案效果良好且易于维护。
您能将 authnz 指令应用于所有 /var/www 吗?这样就无需为每个子目录单独指定它们。如果不能,也许您可以将需要 authnz 的站点移动到子目录中,例如 /var/www/authnz,然后将设置仅应用于该目录一次。