除非从办公室使用 Apache 2.4 连接,否则是否需要 HTTP Basic Auth?

除非从办公室使用 Apache 2.4 连接,否则是否需要 HTTP Basic Auth?

我们希望建立一个仅用于演示目的的网站,以便我们可以:

  1. 通过 HTTP Basic Auth 输入用户名和密码即可从互联网上的任何地方访问。
  2. 为了方便使用,我们希望不必通过办公室的 HTTP Basic Auth,我们的办公室将从 202.161.24.210 进行连接。
  3. 演示站点的某些部分需要向其自身发出 REST 请求,因此我们也希望将 127.0.0.1 和 ::1 列入白名单。

我们似乎已经实现了 2 和 3,但 1 并没有像我们想象的那样顺利,我们的用户不断收到 HTTP Basic Auth 用户名和密码的重新提示,即使他们已经通过身份验证并正在转到网站的不同页面。我们从日志中注意到,他们在访问某些资产时收到以下错误消息:

[Tue Jun 09 10:50:03.442834 2015] [access_compat:error] [pid 5740:tid 140705259312896] [client 78.52.242.163:62774] AH01797: client denied by server configuration: /var/www/docroots/stage/lib/yui/build/moodle-core-checknet/assets/checknet.txt, referer: http://stage.example.org/mod/scorm/player.php

这是我们的 Apache vhost:

<VirtualHost *:80>
ServerName stage.example.org

DocumentRoot /var/www/docroots/stage
    <Directory /var/www/docroots/stage>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None

        # Only visible on Office network or anyone with a valid password.
        AuthType Basic
        AuthName "Authorisation Required"
        AuthUserFile "/var/www/htpasswd"
        Require valid-user
        Order allow,deny
        Allow from 202.161.24.210 127 ::1
        Satisfy any
    </Directory>
</VirtualHost>

我们在 CentOS 7 上运行 Apache 2.4.6。我们的配置正确吗?我们的配置似乎对顶级文件以及/var/www/docroots/stage其直接下属子目录下的其他图像、css 和 javascript 文件有效,但可能是它在经过一定数量的子目录后忘记了 HTTP Auth?SELinux 处于宽容模式。

答案1

如果没有完整的错误消息(我希望是模块和 ip 地址),这有点像猜测,但你混合了 Apache 2.4 中两个不同模块的指令, Require来自 mod-authz-core 的指令和“遗产”指令AllowOrder来自 mod-access-compat,可能堆叠效果不是很好。

您可以尝试更换线路

Order allow,deny
Allow from 202.161.24.210 127 ::1

使用以下内容

Require ip  202.161.24.210 127 ::1/128

已经存在的Satisfy any这应该可以满足你的要求。

你的第三个要求:

演示站点的某些部分需要向其自身发出 REST 请求...

可能不会像您预期的那样从环回地址访问服务器,但可能配置了类似于服务器公共 IP 地址的 FQDNhttp://api.example.com/rest?并且源自服务器的公共 IP 地址。

您可以添加服务器的公共 IP 地址,但从 Apache 2.4 开始更容易解决;本地供应商如果以下任一条件成立,则允许访问服务器:

  • 客户端地址与 127.0.0.0/8 匹配
  • 客户端地址是::1
  • 两个都连接的客户端和服务器地址相同

因此,不要列出环回 IP 地址,而是使用:

Require valid-user
#  Office Gateway:
Require ip 202.161.24.210 
#  API access from this host:   
Require local            
#  Only one or more of the above needs to match:
Satisfy any                  

相关内容