Apache Auth 指令级联到别名目录

Apache Auth 指令级联到别名目录

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

我能想到的避免这种情况的唯一方法是将 auth 部分拆分为单独的文件并使用 引用该文件Include

作为一种解决方案,它将Include运行良好并且易于维护。

还有其他方法可以做到这一点,从而减少重复,使 vhost 配置文件更简洁吗?
万一 Apache 中有一种很好的方法可以做到这一点,而我在过去 15 年里没有发现过!

编辑:我应该指出,我使用的原因Alias是为了便于部署,我不想每次重建该DocumentRoot目录时都必须重新创建符号链接。但我意识到使用符号链接Location会提供我所寻找的级联以避免重复。
我想我遇到的问题更多地与Alias需要匹配的Directory块才能限制访问这一事实有关。

答案1

你可以使用mod_authn_alias可以对一些指令进行分组和重复使用,但我认为这没什么用。你仍然需要重复执行许多指令。

根据我的经验,该Include解决方案效果良好且易于维护。

您能将 authnz 指令应用于所有 /var/www 吗?这样就无需为每个子目录单独指定它们。如果不能,也许您可​​以将需要 authnz 的站点移动到子目录中,例如 /var/www/authnz,然后将设置仅应用于该目录一次。

相关内容