docker配置 nginx 关于location的匹配顺序和root 和alias的区别和proxy_pass的使用规则,try_file,index

本文详细解析了Nginx中location指令的匹配规则,包括精确匹配、正则匹配及通配符匹配的过程。同时,阐述了proxy_pass指令的使用方法,及其与alias和root指令的区别。此外,还介绍了index、try_file指令的工作原理,以及如何配置自动索引和文件列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

proxy_pass的使用规则

Location详解之精准匹配、正则匹配

Directives with the = prefix that match the query exactly. If found, searching stops.
All remaining directives with conventional strings, longest match first. If this match used the ^~ prefix, searching stops.
Regular expressions, in order of definition in the configuration file.
If #3 yielded a match, that result is used. Else the match from #2 is used.
=前缀的指令严格匹配这个查询。如果找到,停止搜索。
所有剩下的常规字符串,最长的匹配。如果这个匹配使用^〜前缀,搜索停止。
正则表达式,在配置文件中定义的顺序。
如果第3条规则产生匹配的话,结果被使用。否则,如同从第2条规则被使用。

总结

在没有标识符的请求下,匹配规则如下:
nginx服务器首先在server块的多个location块中搜索是否有标准的uri和请求字符串匹配。如果有多个标准uri可以匹配,就匹配其中匹配度最高的一个location。
然后,nginx在使用location块中,正则uri和请求字符串,进行匹配。如果正则匹配成功,则结束匹配,并使用这个location处理请求;如果正则匹配失败,则使用标准uri中,匹配度最高的location。
备注:
如果有精确匹配,会先进行精确匹配,匹配成功,立刻返回结果。
普通匹配与顺序无关,因为按照匹配的长短来取匹配结果。
正则匹配与顺序有关,因为是从上往下匹配。(首先匹配,就结束解析过程)。
在location中,有一种通配的location,所有的请求,都可以匹配,如下:
location / {
因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
但是正则和最长字符串会优先匹配
}

proxy_pass后面只有域名+端口 则把匹配到的url加在其后
如果有其他内容,则把未匹配到的加在其后

alias和root
root类似proxy_pass第一种,
alias第二种,一定要带/

index & root

index index$geo html index0.html index.html;

切记, index指令并不是查到文件之后,就直接拿来用了。它的实际工作方式是:

如果文件存在,则 使用文件作为路径,发起内部重定向。直观上看上去就像再一次从客户端发起请求,Nginx再一次搜索 location一样。

既然是 内部重定向,域名+端口不发生变化,所以只会在同一个 server下搜索。

同样,如果 内部重定向发生在 proxy_pass反向代理后,那么重定向只会发生在代理配置中的同一个 server。

该指令后面可以跟多个文件,用空格隔开;

如果包括多个文件,Nginx会根据文件的枚举顺序来检查,直到查找的文件存在;

文件可以是相对路径也可以是绝对路径,绝对路径需要放在最后;

文件可以使用变量 $来命名;

index index$geo html index0.html index.html;

该指令拥有默认值, index index.html ,即,如果没有给出index,默认初始页为index.html
nginx默认是不允许列出整个目录的。如需此功能,
打开nginx.conf文件,在location server 或 http段中加入
autoindex on;
另外两个参数最好也加上去:

autoindex_exact_size off;
默认为on,显示出文件的确切大小,单位是bytes。
改为off后,显示出文件的大概大小,单位是kB或者MB或者GB

autoindex_localtime on;
默认为off,显示的文件时间为GMT时间。
改为on后,显示的文件时间为文件的服务器时间

location /images {
root /var/www/nginx-default/ibugaocn;
autoindex on;
}
在这里插入图片描述

location /img/ {
alias /var/www/image/;
}
#若按照上述配置的话,则访问/img/目录里面的文件时,ningx会自动去/var/www/image/目录找文件
location /img/ {
root /var/www/image;
}
#若按照这种配置的话,则访问/img/目录下的文件时,nginx会去/var/www/image/img/目录下找文件。]

另外对于index,含义如下

location / {
root /var/www/;
index index.htm index.html;
}
这样,当用户请求 / 地址时,Nginx 就会自动在 root 配置指令指定的文件系统目录下依次寻找 index.htm 和index.html 这两个文件。如果 index.htm 文件存在,则直接发起“内部跳转”到 /index.htm 这个新的地址;而如果 index.htm 文件不存在,则继续检查 index.html 是否存在。如果存在,同样发起“内部跳转”到/index.html;如果 index.html 文件仍然不存在,则放弃处理权给 content 阶段的下一个模块

try_file

location /images/ {
root /opt/html/;
try_files $uri $uri/ /images/default.gif;
}
比如 请求 127.0.0.1/images/test.gif 会依次查找 1.文件/opt/html/images/test.gif 2.文件夹 /opt/html/images/test.gif/下的index文件 3. 请求127.0.0.1/images/default.gif

4.其他注意事项
1.try-files 如果不写上 $uri/,当直接访问一个目录路径时,并不会去匹配目录下的索引页 即 访问127.0.0.1/images/ 不会去访问 127.0.0.1/images/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值