nginx location块配置小结

 更新时间:2024年03月15日 16:53:31   作者:曹朋羽  
nginx可以通过配置文件中的location指令来定义不同的请求匹配规则和处理逻辑,也就是描述不同请求资源在服务器的位置或者配置代理转发路径,这篇文章主要介绍了nginx location块配置,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

nginx可以通过配置文件中的location指令来定义不同的请求匹配规则和处理逻辑,也就是描述不同请求资源在服务器的位置或者配置代理转发路径。

location块通常在server块中,一个server块可以包含多个location块。

server {
  location {}
  location {}
}

语法规则

location [ = | ~ | ~* | ^~ ] uri { ... }

其中[]位置是设置匹配方式符号,有以下几种情况

  • none: 字符串前缀匹配,会继续往后进行正则匹配
  • =: 代表精确匹配,命中后立即结束返回
  • ~: 正则匹配,区分大小写
  • ~*: 正则匹配,不区分大小写
  • ^~: 最长非正则表达式匹配(字符串匹配)。如果请求的URI命中这样的位置块,则不会进行进一步的匹配

uri就是表示的资源路径标识。

location配置既可以由前缀字符串定义,也可以由正则表达式定义。为了找到匹配给定请求的location,nginx首先检查使用前缀字符串定义的位置(前缀匹配)。选择匹配前缀最长的位置并记住。然后按照正则表达式在配置文件中的出现顺序依次进行正则匹配。正则表达式的搜索在第一次匹配时终止,并使用相应的配置。如果没有找到与正则表达式的匹配,则使用先前记住的前缀匹配的配置。

下面来依次看下对应的匹配

精确匹配

location = /test{
    return 200 "= /test";
}

这种方式访问只匹配/test,访问/test/1这种就会报404错误

前缀匹配

location /test{
    return 200 "/test";
}

这种可以匹配前缀进行匹配,像 /test-a,/test/a 都可以匹配到

正则匹配

在 location /test基础上添加如下正则匹配

location ~ /test[0-9] {
    return 200 "reg[0-9]";
}

curl -i http://localhost/test1请求test1地址会落到该正则匹配地址,这个时候访问/testa 会落到上面的前缀匹配location /test里。这也说名了前缀匹配不会直接结束,会继续找下一个匹配的正则匹配,如果找到则访问正则匹配的location,否则进入前缀匹配

在前面的配置基础上,再加一个正则配置location ~ /test*

location = /test{
    return 200 "= /test";
}
location /test{
    return 200 "/test";
}
location ~ /test[0-9] {
    add_header Content-Type "text/plain";
    return 200 "reg[0-9]";
}
location ~ /test* {
    return 200 "test*";
}

这个时候访问/test1还是会进入/test[0-9]的配置,虽然后面的/test*也匹配,这里证明正则匹配只要匹配到一个后便立即结束

正则匹配有两种 location ~ 表示区分大小写,location ~* 表示不区分大小写。不区分大小写这里就不演示了。

下面还有最后一种格式location ^~。这种也是字符串前缀匹配,不过这种区分于默认字符串匹配的方式是,如果当前location ^~字符串前缀匹配,会立即结束,不会再继续往下查找正则匹配

还是搞个例子来看下,添加一个^~配置,此时配置如下:

location = /test {}
location /test {}
location ^~ /test1 {}
location ~ /test[0-9] {}
location ~ /test* {}

此时如果访问/test1则会直接进入location ^~ /test1,虽然后面的正则匹配location ~ /test[0-9]也可以匹配,但是

先遇到location ^~ /test1匹配后就直接结束了。

配置location还有一点需要注意,nginx会检查location规则不能重复。像location /test和location ^~ /test虽然规则符号不同,但是也被认为是相同的location。一般情况下会配置一个 location /来兜底所有的请求。正则匹配也是经常用的一种配置方式,如location ~ .jpg$可以匹配所有的jpg图片文件请求,location ~ ^/user/\d+可以匹配所有以/user/[用户ID]开头的请求。

优惠劵

相关文章

  • 如何将 Nginx 配置为Web服务器的方法

    如何将 Nginx 配置为Web服务器的方法

    本篇文章主要介绍了如何将 Nginx 配置为Web服务器的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Apache和Nginx实现虚拟主机的3种方式小结

    Apache和Nginx实现虚拟主机的3种方式小结

    Apache是一个模型化的服务器,可以运行在几乎所有的服务器上。其属于应用服务器,这篇文章主要介绍了Apache和Nginx实现虚拟主机的3种方式,需要的朋友可以参考下
    2023-11-11
  • Nginx开源可视化配置工具NginxConfig使用教程

    Nginx开源可视化配置工具NginxConfig使用教程

    这篇文章主要为大家介绍了Nginx开源可视化配置工具NginxConfig使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Nginx防盗链的3种方法

    Nginx防盗链的3种方法

    Nginx防盗链的3种方法,需要的朋友可以参考下。
    2010-12-12
  • 解决Nginx网关超时出现504 GATEWAY TIMEOUT的问题

    解决Nginx网关超时出现504 GATEWAY TIMEOUT的问题

    这篇文章主要给大家介绍了如何解决Nginx网关超时出现504 GATEWAY TIMEOUT的问题,文章通过代码示例和图文结合介绍的非常详细,有遇到相同问题的朋友可以参考阅读本文
    2023-11-11
  • LNMP简介(最新推荐)

    LNMP简介(最新推荐)

    LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写,L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python
    2023-08-08
  • CentOS下 安装 Nginx的方法

    CentOS下 安装 Nginx的方法

    这篇文章主要介绍了CentOS下 安装 Nginx的方法,本文内容简单,通过实例代码给大家讲解的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • Nginx 启动、停止、重启、升级操作命令收集

    Nginx 启动、停止、重启、升级操作命令收集

    也许你不知道什么是Nginx,Nginx是一个WEB服务器,如IIS那样,现在好多门户都在使用了Nginx作为WEB服务器了,Nginx在Linux系统下跑很优秀,强过其它的WEB服务端,还可以做负载均衡,很不错吧。
    2010-10-10
  • 解决nginx报错信息 client intended to send too large body: 1331696 bytes

    解决nginx报错信息 client intended to send too large body: 1331696

    这篇文章主要介绍了解决nginx报错 client intended to send too large body: 1331696 bytes的相关资料,需要的朋友可以参考下
    2017-02-02
  • Windows下用Nginx代理Django安装配置实例

    Windows下用Nginx代理Django安装配置实例

    这篇文章主要介绍了Windows下用Nginx代理Django安装配置实例,本文讲解了安装djanjo、用djanjo生成简单web页面、用nginx进行代理等内容,需要的朋友可以参考下
    2015-03-03

最新评论

?


http://www.vxiaotou.com