我的 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>
那也不起作用。
答案1
根据文档,指令中的路径<Directory>
必须是文件系统路径,而不是别名或变量。所以我认为你的指令没有任何效果,因为{THUMBS_ROOT}
文件系统中没有路径。
可能的选择:
<Directory //mysmbserver/website/thumbs>
。我不知道这是否会起作用,但如果 Windows 将其视为有效的文件系统路径,它可能会起作用。<Location /thumbs>