当前位置:首页 > 技术文章 > 正文内容

Nginx 路径匹配规则

arlanguage5个月前 (12-09)技术文章52

Nginx路径匹配符号

  • = 表示精确匹配
  • ^~ 表示uri以某个常规字符串开头,大多情况下用来匹配url路径,nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
  • ~ 正则匹配(区分大小写)
  • ~* 正则匹配(不区分大小写)
  • !~ 区分大小写不匹配
  • !~* 不区分大小写不匹配
  • / 任何请求都会匹配
location [=|~|~*|^~] /uri/ { }

符号优先级

首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

示例

location  = / {
  # 精确匹配 / ,主机名后面不能带任何字符串
  [ 规则 A ] 
}

location  / {
  # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
  # 但是正则和最长字符串会优先匹配
  [ 规则 B ] 
}

location /documents/ {
  # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
  # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
  [ 规则 C ] 
}

location ~ /documents/Abc {
  # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
  # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
  [ 规则 D ] 
}

location ^~ /images/ {
  # 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。
  [ 规则 E ] 
}

location ~* \.(gif|jpg|jpeg)$ {
  # 匹配所有以 gif,jpg或jpeg 结尾的请求
  # 然而,所有请求 /images/ 下的图片会被 [规则 E] 处理,因为 ^~ 优先级更高
  [ 规则 F ] 
}

location /images/ {
  # 字符匹配到 /images/,继续往下,会发现 ^~ 存在
  [ 规则 G ] 
}

location /images/abc {
  # 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在
  [ 规则 H ] 
}

location ~ /images/abc/ {
  # 只有去掉 [规则 E] 才有效:先最长匹配 [规则 H] 开头的地址,继续往下搜索,匹配到这一条正则,采用
  [ 规则 I ] 
}

其他简单示例

# 微信授权文件通用匹配规则
location ~(MP_verify_)*\.(txt)$ {
    root   /usr/share/nginx/file;
}

匹配MPverify****.txt文件,中间任意字符,并在/usr/share/nginx/file目录中寻找对应文件

# 静态文件工程配置
location ^~ /static/ {
    root   /data/product/static;
    index  index.html index.htm;
}

匹配/static开头路径,并在/data/product/static寻找对应文件

# 静态文件配置
location ~* \.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {  
    root /data/product/static/;  
}

配置proxy_pass时路径拼接规则

在nginx中配置proxypass时,如果是按照^~匹配路径时,要注意proxypass后的url最后的/

  • 当加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;
  • 如果没有/,则会把匹配的路径部分也给代理走
server {
    listen 80;
    server_name test.huangjian.com;

    location ^~ /bpm {
        proxy_set_header    Host $host;
        proxy_set_header    X-Real-IP  $remote_addr;
        proxy_pass http://127.0.0.1:8081/;
    }
}

加上/ 请求地址http://test.huangjian.com/bpm/index,会转发到http://127.0.0.1:8081/index

server {
    listen 80;
    server_name test.huangjian.com;

    location ^~ /bpm {
        proxy_set_header    Host $host;
        proxy_set_header    X-Real-IP  $remote_addr;
        proxy_pass http://127.0.0.1:8081;
    }
}

不加/ 请求地址http://test.huangjian/bpm/index,会转发到http://127.0.0.1:8081/bpm/index

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/6.html

分享给朋友:

“Nginx 路径匹配规则” 的相关文章

Docker搭建开发环境(Nginx+MySQL+PHP)

注意事项1、像MySQL配置文件、Nginx配置文件、网站根目录这种比较经常操作的需要先使用 docker cp 将文件从容器里复制到主机目录,docker run的时候直接挂载目录就可以了2、docker run MySQL和Nginx的时候注意使用 --link实现容器之间通信3、运行容器的时候...

服务器不能正常关机和重启是怎么回事?

服务器不能正常关机和重启是怎么回事?服务器无法正常关机或重启可能是由多种原因引起的,涉及操作系统、硬件、应用程序和配置设置等方面。以下是详细的原因分析及对应的解决方案。一、服务器无法关机/重启的常见原因1. 操作系统问题(1)系统进程未正常终止某些进程或服务在关机时未能按预期停止,导致系统卡在关机或...

使用Keepalived实现Nginx的自动重启及双主热备高可用

推荐阅读:20年清华架构师耗时整整一百天打造1000+道Java高频面试手册1、概述之前我们使用Keepalived实现了Nginx服务的双机主备高可用,但是有几个问题没有解决,今天一起探讨一下。1)在双机主备机制中,Keepalived服务如果宕了,会自动启用备机进行服务,但Nginx服务如果负载...

使用nginx对视频、音频、图片等静态资源网址,加token签权

目前很多静态资源,都可以无权限验证,进行访问或转发,对有价值的资源进行签权,限制转发无法在代码中实现拦截,我们可以使用nginx对视频、音频、图片等静态资源网址,加token签权如:http://192.168.1.22/123.mp3http://192.168.1.22/123.m3u8http...

Windows下配置Nginx开机自启动

如何安装、配置网站就不说了,文章主要讲讲windows中如何让nginx开机自启动1.windows中配置nginx开机启动需要借助Windows Service Wrapper工具。可以通过地址http://repo.jenkins-ci.org/releases/com/sun/winsw/wi...

我采访了一位 Pornhub 工程师,聊了这些纯纯的话题

成人网站在推动 Web 发展方面所起到的作用无可辩驳。从突破浏览器的视频能力限制,到利用 WebSocket 推送广告(防止被广告拦截器拦截),你必须不断想出各种聪明的办法,让自己处在 Web 技术创新的最前沿。最近,我有幸采访了大型成人网站 Pornhub 的一位 Web 开发工程师,了解了相关的...