本文所使用的环境信息如下:
- windows11 (主机系统)
- virtual-box-7.0环境下的ubuntu-18.04
- nginx-1.22.1 (linux)
斜杠结尾之争
实践中,nginx里最常用的指令就是location和proxy_pass了。前者用于为不同请求uri指定不同nginx配置,后者用于匹配的location进行转发(通常是动态内容)。关于二者的配置,有一个老生常谈的话题,那便是:配置的值是否有斜杠结尾,对文件路径查找(或请求转发)行为有哪些影响?相关文章也非常多,且多数粗看一眼,照其行事,也能立即解决问题。鄙人私以为其中部分文章的说法是不严谨的,故特撰此文,以备己查。
结论
不再废话,直接上结论(如果对location和proxy_pass的功能和基本配置还不熟悉,建议先看后面的章节):
-
location
一般情况下,location指令不会对是否有斜杠结尾这个场景做特殊处理,除非满足以下条件:- location指令配置为前缀匹配
- 前缀的最后一个字符为斜杠 /
- 指令内嵌入了其它代理类指令
这些代理类指令有:proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pass、grpc_pass ①
满足以上条件后,也只会对一个特定的uri做特殊处理,这个uri除了没有尾部的斜杠外,正好与location定义的前缀一模一样。对这个特殊的uri的处理方式为:返回一个301重定向,重定向的地址为:原始请求uri + /,也就是说,重定向的地址与Location前缀内容完全相同 ②
示例配置如下:
location /films/nature/ { proxy_pass http://film-server; }
假定请求的url为http://localhost/films/nature,则location的处理方式为:返回一个301重定向,重定向的地址为http://localhost/films/naure/。与原始请求的唯一差别就是,新的uri地址比原来的uri地址尾部多了一个斜杠 /
标签:http,uri,nginx,location,斜杠,pass,匹配,proxy From: https://www.cnblogs.com/sandgull/p/column-nginx-config_of_location_and_proxy_pass_and_the_