我们的一个可公开访问的网络服务器正在使用<Location />
块来限制对其自身的所有访问。
我有一个特定目录,其需要比 提供的更严格的访问限制<Location />
。
然而,使用<Directory /path/to/dir>
是不可能的,因为<Directory>
被覆盖了<Location>
。
我该怎么做才能限制对特定目录的访问,同时对整个 Web 服务器保持不太严格的访问限制?
无法进行更改<Location />
,<Directory /path/to/docroot>
因为此 Apache 充当内部服务器上许多其他 Web 服务器的反向代理,这些服务器无法从网络外部直接访问。
根据要求,关于我们的配置的一些细节:
我们所有的授权和身份验证都是通过 LDAP 完成的。
由于此 Apache 充当许多内部 Web 服务器的反向代理,因此我们需要限制对所有 Web 服务器的访问:
<Location />
Order deny,allow
Deny from all
AuthName [...]
AuthType Basic
AuthLDAPURL [...]
AuthBasicProvider ldap
Require ldap-attribute [...]
</Location>
文档根目录下的特定目录需要更严格的访问权限。因此我想到了这个:
<Directory /path/to/dir>
Order allow,deny
AuthName [...]
AuthType Basic
AuthLDAPURL [...]
AuthBasicProvider ldap
Require ldap-attribute [...]
Require ldap-attribute [...]
Require ldap-attribute [...]
</Directory>
但是,这不起作用,因为<Location>
各节会逐节合并<Directory>
(请参阅这里)。
因此,即使我已经<Directory>
为目录编写了一个部分,我希望对指令有更严格的访问权限,但指令会被中的指令覆盖<Location />
,从而允许比预期更多的用户访问。
答案1
如何使用<Location /location/to/restrict/>
?
无论如何,它们本身并不是“覆盖”;而是合并。有关更多信息,请参阅这里。
<Directory>
如果您对要合并的内容很谨慎,那么 您仍然可以使用。<Location>
最后应用,但如果它没有指定任何访问控制,它就不会使您在中获得的内容无效<Directory>
。
Order deny,allow
<Location />
# No permission settings here; no allow or deny.
# Will be allowed by default because of the Order.
...
</Location>
<Directory /location/to/restrict/>
Deny from all
Allow from 10.0.0.0/8
...
</Directory>