nginx location匹配规则

nginx 之 location “/” 匹配规则

前置测试访问域名:www.test.com/api/upload

1.location和proxy_pass都带/

location /api/ {
    proxy_pass http://127.0.0.1:8080/;
}

访问地址:www.test.com/api/upload --> http://127.0.0.1:8080/upload

2.location不带/,proxy_pass带/

location /api {
    proxy_pass http://127.0.0.1:8080/;
}

访问地址: www.test.com/api/upload --> http://127.0.0.1:8080//upload

3.location带/,proxy_pass不带/

location /api/ {
    proxy_pass http://127.0.0.1:8080;
}

访问地址: www.test.com/api/upload --> http://127.0.0.1:8080/api/upload

4.location和proxy_pass都不带/

location /api {
    proxy_pass http://127.0.0.1:8080;
}

访问地址: www.test.com/api/upload --> http://127.0.0.1:8080/api/upload

5.同1,但 proxy_pass带地址

location /api/ {
    proxy_pass http://127.0.0.1:8080/server/;
}

访问地址: www.test.com/api/upload --> http://127.0.0.1:8080/server/upload

6.同2,但 proxy_pass带地址

location /api {
    proxy_pass http://127.0.0.1:8080/server/;
}

访问地址: www.test.com/api/upload --> http://127.0.0.1:8080/server//upload

7.同3,但 proxy_pass带地址

location /api/ {
    proxy_pass http://127.0.0.1:8080/server;
}

访问地址: www.test.com/api/upload --> http://127.0.0.1:8080/serverupload

8.同4,但 proxy_pass带地址

location /api {
    proxy_pass http://127.0.0.1:8080/server;
}

访问地址: www.test.com/api/upload --> http://127.0.0.1:8080/server/upload

nginx之 root 和alias

最基本的区别:

​ alias指定的目录是准确的该目录

​ root是指定目录的上级目录,并且该上级目录要含有location指定名称的同名目录。

​ (1) . alias虚拟目录配置中,location匹配的path目录如果后面不带"/“,那么访问的url地址中这个path目录后面加不加”/“不影响访问,访问时它会自动加上”/“;
但是如果location匹配的path目录后面加上”/“,那么访问的url地址中这个path目录必须要加上”/“,访问时它不会自动加上”/“。如果不加上”/“,访问就会失败!
​ (2) . root目录配置中,location匹配的path目录后面带不带”/",都不会影响访问。

所以,一般情况下,在nginx配置中的良好习惯是:
1)在location /中配置root目录;

​ 2)在location /path中配置alias虚拟目录。

#经上面介绍可得知,alias 受 location以及url的 “/” 影响,但是root 不受影响
### alias 正确用法
location /img/ {
  alias /root/data/img/;
}
或者
location /img {
  alias /root/data/img;
}
这里location 带 / 下面的url也要带。 location不带 / 下面也不能带
#访问 ip+port/img/test.jpg --> /root/data/img/test.jpg
### alias 错误用法
location /img/ {
  alias /root/data/img;
}
或者
location /img {
  alias /root/data/img/;
}
#结果都是404.

-------------------------------------------------------------------------

### root 错误用法
location /img/ {
  root /root/data/img/;
}
#访问 ip+port/img/test.jpg --> /root/data/img/img/test.jpg

### root 正确用法
location /img/ {
  root /root/data/; #这里前提是该目录下有img这个子目录
}
或者
location / {
  root /root/data/img/;
}
#访问ip+port/img/test.jpg --> /root/data/img/test.jpg 推荐使用第二种可以灵活变换目录

nginx之 location正则匹配(“=”,"^“,”"等)

匹配规则:
location 路径正则匹配规则:location [ = | ~ | ~* | ^~ | !~ | !~* ] /uri/{…}

  • = 表示精确匹配

  • ~ 表示区分大小写正则匹配

  • ~* 表示不区分大小写正则匹配

  • ^~ 表示URI以某个常规字符串开头

  • !~ 表示区分大小写正则不匹配

  • !~* 表示不区分大小写正则不匹配

  • / 通用匹配,任何请求都会匹配到

匹配顺序
多个location配置的情况下匹配顺序为:

1、首先匹配 =

2、其次匹配 ^~

3、其次是按文件中顺序正则匹配

4、最后交给通用 / 匹配

当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

常用规则
1、精确匹配

location = / {

proxy_pass http://127.0.0.1:9000;

}

将所有请求直接转发给服务器的9000端口。

2、处理静态文件

目录匹配

location ^~ /static/ {

root    /data/app/static;

}

后缀匹配

location ~* .(gif|jpg|jpeg|png|css|js|ico)$ {

root    /data/app/static;

}

3、转发动态请求到后端应用服务器

将api开始的请求转发给后端8080端口

location /api {

proxy_pass http://127.0.0.1:8080;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值