Apache Require IP 指令不起作用

Apache Require IP 指令不起作用

我的 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>

相关内容