Nginx中location内include配置作用范围及nginx -T用法咨询
Nginx配置拆分后的location生效范围与匹配顺序问题
一、location ~ \.php$ {return 404}的生效范围
这个规则仅对{host}/b.php这类请求生效,具体原因:
- 从
nginx -T的输出能明确看到,c.conf是被include在location b块内部的,所以这个PHP规则属于location b的子location,并非全局生效的规则。 - 请求匹配逻辑:只有当请求先匹配到外层的
location b(比如/b.php会匹配前缀/b),才会进入该块内部的子规则匹配,触发404返回。 - 对于
{host}/a.php这类请求,会优先匹配全局的location a(前缀匹配/a),不会进入location b的子规则,因此不会返回404。
二、能否通过nginx -T查看location匹配顺序?
nginx -T只能展示合并后的完整配置内容,无法直接给出Nginx实际匹配location的顺序。
Nginx的location匹配有固定优先级逻辑,需结合配置内容自行判断:
- 优先匹配
=开头的精确匹配规则 - 其次匹配
^~开头的前缀匹配(匹配成功后不再检查正则规则) - 接着按配置文件中出现的顺序,匹配
~/~*开头的正则规则 - 最后匹配普通前缀匹配规则
- 若所有规则都不匹配,使用默认的
/location(若存在)
内容的提问来源于stack exchange,提问作者LokiTheCreator
相关产品推荐
相关产品推荐

