Nginx Location配置详解

Nginx Location配置详解

码农世界 2024-06-10 后端 90 次浏览 0个评论

目录

  • 一、Location语法结构
    • 1、语法结构说明
    • 2、各个标识的含义和优先级
    • 3、配置请求的根目录
    • 4、替换请求的uri
    • 二、Location具体示例
      • 1、精确匹配
      • 2、正则匹配
      • 3、常规字符串匹配
      • 三、调试Location的小技巧

        一、Location语法结构

        1、语法结构说明

        在Nginx官方文档中定义的location语法结构为:

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

        其中uri变量是待匹配的请求字符串,可以是不包含有正则表达式的字符串,称之为标准uri,也可以是包含正则表达式的字符串,称之为正则uri。方括号里的部分为可选项,我们称之为匹配标识。

        当不添加匹配标识时,Nginx服务器首先在server块的各个location块中搜索是否有标准uri和请求字符串匹配,如果有多个可以匹配,就记录匹配度最高的一个。

        然后,服务器再用location块中的正则uri和请求字符串匹配,如果第一个正则uri匹配成功,结束搜索,并使用该location块处理请求。如果所有正则匹配全部失败,则用标准uri匹配到的匹配度最高的location块进行处理。

        2、各个标识的含义和优先级

        • = 表示精确匹配,这个优先级也是最高的。
        • ^~ 表示 uri 以某个常规字符串开头,理解为匹配 url 路径即可。nginx 不对 url 做编码,因此请求为

          /static/20%/aa,可以被规则^~ /static/ /aa 匹配到(注意是空格)。

        • ~ 表示区分大小写的正则匹配。
        • ~* 表示不区分大小写的正则匹配。
        • !~和!~*分别为区分大小写不匹配及不区分大小写不匹配的正则匹配。
        • / 通用匹配,任何请求都会匹配到,默认匹配。

          优先级:精确匹配 > 正则匹配 > 通用匹配。


          3、配置请求的根目录

          Web服务器接收到网络请求后,首先要在服务器端指定目录中寻找请求资源。在Nginx服务器中,root用来配置资源的根目录,如下:

          location /images {
          	root /nginx/images;
          }
          

          备注:当访问/images/1.jpg时,Nginx会在服务器上寻找路径为/nginx/images/images/1.jpeg的文件。

          4、替换请求的uri

          通过root指令我们可以指定资源访问的根目录,但是我们会发现访问的uri会附加到指定的文件目录下。通过alias指定,我们可以在访问服务器上资源时不保留访问前缀,如下:

          location /images {
          	alias /nginx/images;
          }
          

          备注:当访问/images/1.jpg时,Nginx会在服务器上寻找路径为/nginx/images/1.jpeg的文件。


          二、Location具体示例

          1、精确匹配

          location = /50x.html {
          	root /nginx/html;
          }
          

          备注:当访问/50x.html时,Nginx会在服务器上寻找路径为/nginx/html/50x.html的文件。

          2、正则匹配

          location ~* ^/images/(.+\.(png|jpg|jpeg|gif))$ {
             alias  /nginx/images/$1;
          }
          

          备注:当访问/images/1.JPEG时,Nginx会在服务器上寻找路径为/nginx/images/1.jpeg的文件,并且访问路径不区分大小写。

          3、常规字符串匹配

          location ~^ /static//(.+\.(html|htm)){
          	alias /nginx/html/$1
          }
          

          备注:当访问/static/%20/index.html时,Nginx会在服务器上寻找路径为/nginx/html/1.html的文件。


          三、调试Location的小技巧

          一般如果文件访问失败,在错误日志里能看到错误日志提示,如下:

          2024/05/11 15:15:28 [error] 16746#0: *125484 open() "/nginx/images/jpeg" failed (2: No such file or directory), client: 113.116.81.20, server: xxx.com, request: "GET /images/1.jpeg HTTP/1.1", host: "xxx.com"
          

          错误日志的默认配置为:error_log logs/error.log error,也就是在logs/error.log文件中能看到相关错误提示,通过提示我们再进行配置的调整。

          Nginx Location配置详解

转载请注明来自码农世界,本文标题:《Nginx Location配置详解》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,90人围观)参与讨论

还没有评论,来说两句吧...

Top