前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nginx Location 节点常用指令

nginx Location 节点常用指令

原创
作者头像
啵啵肠
发布2023-11-20 14:18:29
1930
发布2023-11-20 14:18:29
举报

nginx Location 节点常用指令

root

语法:root path;

默认值:root html;

作用:设置请求的根目录。

示例:

代码语言:shell
复制
location /i/ {
    root /data/w3;
}

这时请求 /i/top.gif 会返回服务器中 /data/w3/i/top.gif 路径文件。

alias

语法:alias path;

作用:定义 location 的替换路径。也就是别名的意思。

示例:

代码语言:shell
复制
location /i/ {
    alias /data/w3/images/;
}

这时请求 /i/top.gif 会将路径中的 i 替换成服务器路径的 /data/w3/images/,也就是最终返回 /data/w3/images/top.gif。如果定义的路径是文件夹,那么需要使用 / 结尾。比如当前如果不是 / 结尾的话那么最终返回的文件会是 /data/w3/imagestop.gif

location

语法:

代码语言:scss
复制
location [ = | ~ | ~* | ^~ ] uri { ... } 
location @name { ... }
代码语言:shell
复制
1、~   # 使用波浪符“ ~”区分大小写正则匹配,如 location ~ /abc { }
2、~*  #不区分大小写的正则匹配,如 location ~* /abc { }
3、^~  # 匹配路径的前缀,如果找到停止搜索,如 location ^~ /abc { }
4、=   #精确匹配 如 location = /abc { }
5、    #普通路径前缀匹配 如 location /abc { }

优先级

4 > 3 > 2 > 1 > 5。如果在同一个类型当中不同的前缀,则匹配度越高的优先级越高。

~

代码语言:shell
复制
location ~ /html.?/ {
           root /usr/html;
        }

请求 http://localhost:6765/1111/html1/1112.txt 访问后最终映射到 /usr/html/1111/html1/1112.txt。当前正则表示只要出现了 html 那么就能被匹配,因为请求中 html1 带有 html 所有请求匹配成功,这时候路径拼接规则会将 hostname 后的地址截取,也就是 1111/html1/1112.txt 部分拼接到 /usr/html 的后面,所以最终的访问地址是 /usr/html/1111/html1/1112.txt

注意:window环境下目录是大小写不敏感的,所以在win环境下测试大小写失效

proxy_pass

语法:proxy_pass URL

作用:设置代理服务器的协议和地址以及location中可以匹配的一个可选的URI。协议可以是"http"或"https"。地址可以是一个域名或ip地址和端口,或者一个 unix-domain socket 路径。

URI 匹配规则

proxy_pass 中有两种情况,第一种是带 uri,另外一种是不带 uri 的。如果是带 uri 是直接匹配部分后拼接到代理地址后,如果是不带 uri 则是 uri + 匹配部分后拼接到代理地址后。

带 uri

代码语言:shell
复制
server {
        listen  6765;
        location /html/ {
           proxy_pass http://127.0.0.1:9028/;
        }
   }

访问地址:http://localhost:6765/html/test,最终的映射是代理地址【http://127.0.0.1:9028/ + 匹配部分后【test】 -> http://127.0.0.1:9028/test

location /html/ {
           proxy_pass http://127.0.0.1:9028/ttt;
        }

访问地址:http://localhost:6765/html/test,最终的映射是代理地址 【http://127.0.0.1:9028/ttt】+ 匹配部分后【test】 -> http://127.0.0.1:9028/ttttest


location /html/ {
           proxy_pass http://127.0.0.1:9028/ttt/;
        }

访问地址:http://localhost:6765/html/test,最终的映射是代理地址【http://127.0.0.1:9028/ttt/】+ 匹配部分后【test】 -> http://127.0.0.1:9028/ttt/test

不带 uri

代码语言:ruby
复制
location /html/ {
           proxy_pass http://127.0.0.1:9028;
        }

访问地址:http://localhost:6765/html/test,最终的映射是代理地址【http://127.0.0.1:9028】+ uri【/html/】+ 匹配部分后【test】-> http://127.0.0.1:9028/html/test

location ~ /html/ {
           proxy_pass http://127.0.0.1:9028;
        }

访问地址:http://localhost:6765/api/html/test,最终的映射是代理地址【http://127.0.0.1:9028】+ uri【/api/html/】+ 匹配部分后【test】-> http://127.0.0.1:9028/api/html/test

注意:如果使用正则后就不能带 uri 了,也就是不能使用 http://127.0.0.1:9028/ 等。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • nginx Location 节点常用指令
    • root
      • alias
        • location
          • proxy_pass
            • URI 匹配规则
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档