我的 apache 配置文件中有以下内容:
Define THUMBS_ROOT "//mysmbserver/website/thumbs"
Alias "/thumbs" "//mysmbserver/website/thumbs"
<Directory {THUMBS_ROOT}>
Options Indexes FollowSymLinks
<RequireAny>
Require ip 66.54.56.34
Require ip 159.101.84.4
</RequireAny>
</Directory>
LoadModule authz_core_module modules/mod_authz_core.so
我的 apache 版本是 Apache/2.4.29 (Win64)。(是的,我意识到这是 Apache 的旧版本 - 由于它是一个设备设备,我无法升级)
即使我添加了 RequireAny 和 RequireIP apache 也忽略了这一点,并允许任何 IP 访问 thumbs 目录。我不知道为什么。谁能帮我理解?
更复杂的事情我有一个负载平衡器设备位于 apache 前面,所以我真正需要查看的是 X-Forwarded-For 而不是源 IP。我不确定是否需要为 RequireIP 做任何事情来检测 X-Forwarded-For?
无论哪种方式,它都允许访问,而不管 IP 是什么。
编辑:我也试过:
LoadModule authz_core_module modules/mod_authz_core.so
Define THUMBS_ROOT "//mysmbserver/website/thumbs"
Alias "/thumbs" "//mysmbserver/website/thumbs"
SetEnvIF X-Forwarded-For "66.54.56.34" AllowIP1
SetEnvIF X-Forwarded-For "159.101.84.4" AllowIP2
<Directory {THUMBS_ROOT}>
Options Indexes FollowSymLinks
<RequireAny>
Require env AllowIP1
Require env AllowIP2
</RequireAny>
</Directory>
那也行不通。
根据文档,
<Directory>
指令中的路径必须是文件系统路径,而不是别名或变量。所以我认为你的指令没有任何效果,因为{THUMBS_ROOT}
文件系统中没有路径。可能的选项:
<Directory //mysmbserver/website/thumbs>
. 我不知道这是否可行,但如果 Windows 将其视为有效的文件系统路径,它可能会起作用。<Location /thumbs>