OpenBSD 的 httpd 守护进程 {block} 指令不起作用

问题描述

我试图限制对 OpenBSD 的 httpd 本机服务器上托管的简单网站的某些子文件夹的访问。配置比较简单,就是为了测试:

server "10.0.1.222" {
        listen on 10.0.1.222 port 80
        log style combined
        location "/*PHP*"{
                root "/FOLDER"
                fastcgi socket "/run/PHP-fpm.sock"
        }

        directory {
                index "index.PHP"
        }

        location "/*" {
                root "/FOLDER"
        }

        location "/SUBFOLDER/*" {block}
}

SUBFOLDER 中,我放置了一些不用于直接查看的 html。 对于最后一个 location 指令,我希望 http://10.0.1.222/SUBFOLDER/01.html 之类的请求会被 403 代码阻止,但我无法实现。

虽然 http://10.0.1.222/SUBFOLDER/ 返回 access denied,但在 SUBFOLDER 中请求任何正确的 html 文档名称都会为该请求提供服务,没有任何抱怨。

如果 string: /SUBFOLDER/* 是(如我所想)正确的 shell glob,它应该匹配字符串 /SUBFOLDER/ 本身+之后给出的任何字符串,那么像 http://10.0.1.222/SUBFOLDER/01.html 这样的请求应该返回代码 { {1}}。但它不起作用。 我尝试了很多组合:403"/SUBFOLDER/*" 等等,有或没有前导 "/SUBFOLDER/*.html"。没有效果

可能有一些我不明白的地方,但我无法调试我的错误。 我错过了什么?

解决方法

从misc@openbsd.org 获得我自己问题的快速答案:根据手册man httpd.conf,如果位置声明第一场比赛获胜。为了避免忽略一些更具体的规则,有必要将它们放在更全局的规则之前。 就我而言,在 log style combined 解决问题后立即放置阻塞指令。