问题描述
我试图限制对 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
解决问题后立即放置阻塞指令。