www.91084.com

GVKun编程网logo

nginx 的 location 配置详解(nginx的location配置详解带/与不带/的区别)

21

在本文中,我们将详细介绍nginx的location配置详解的各个方面,并为您提供关于nginx的location配置详解带/与不带/的区别的相关解答,同时,我们也将为您带来关于nginxlocati

在本文中,我们将详细介绍nginx 的 location 配置详解的各个方面,并为您提供关于nginx的location配置详解带/与不带/的区别的相关解答,同时,我们也将为您带来关于nginx location 的配置、nginx location 配置、Nginx location 配置信息、Nginx location 配置心得的有用知识。

本文目录一览:

nginx 的 location 配置详解(nginx的location配置详解带/与不带/的区别)

nginx 的 location 配置详解(nginx的location配置详解带/与不带/的区别)

语法规则: location [=|~|~*|^~] /uri/ { … }

= 开头表示精确匹配

^~ 开头表示 uri 以某个常规字符串开头,理解为匹配 url 路径即可。nginx 不对 url 做编码,因此请求为 /static/20%/aa,可以被规则 ^~ /static//aa 匹配到(注意是空格)(20% 表示空格)。

~ 开头表示区分大小写的正则匹配

~*  开头表示不区分大小写的正则匹配

!~ 和!~* 分别为区分大小写不匹配及不区分大小写不匹配 的正则

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

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

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

location = / {  
   #规则A  
}  
location = /login {  
   #规则B  
}  
location ^~ /static/ {  
   #规则C  
}  
location ~ \.(gif|jpg|png|js|css)$ {  
   #规则D  
}  
location ~* \.png$ {  
   #规则E  
}  
location !~ \.xhtml$ {  
   #规则F  
}  
location !~* \.xhtml$ {  
   #规则G  
}  
location / {  
   #规则H  
}  
那么产生的效果如下:
访问根目录 /, 比如 http://localhost/ 将匹配规则 A
访问 http://localhost/login 将匹配规则 B,http://localhost/register 则匹配规则 H
访问 http://localhost/static/a.html 将匹配规则 C
访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配规则 D 和规则 E,但是规则 D 顺序优先,规则 E 不起作用,而 http://localhost/static/c.png 则优先匹配到 规则 C
访问 http://localhost/a.PNG 则匹配规则 E, 而不会匹配规则 D,因为规则 E 不区分大小写。
访问 http://localhost/a.xhtml 不会匹配规则 F 和规则 G,http://localhost/a.XHTML 不会匹配规则 G,因为不区分大小写。规则 F,规则 G 属于排除法,符合匹配规则但是不会匹配到,所以想想看实际应用中哪里会用到。
访问 http://localhost/category/id/1111 则最终匹配到规则 H,因为以上规则都不匹配,这个时候应该是 nginx 转发请求给后端应用服务器,比如 FastCGI(php),tomcat(jsp),nginx 作为方向代理服务器存在。
所以实际使用中,通常至少有三个匹配规则定义,如下:
#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。  
#这里是直接转发给后端应用服务器了,也可以是一个静态首页  
# 第一个必选规则  
location = / {  
    proxy_pass http://tomcat:8080/index  
}  
   
# 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项  
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用  
location ^~ /static/ {  
    root /webroot/static/;  
}  
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {  
    root /webroot/res/;  
}  
   
#第三个规则就是通用规则,用来转发动态请求到后端应用服务器  
#非静态文件请求就默认是动态请求,自己根据实际把握  
#毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了  
location / {  
    proxy_pass http://tomcat:8080/  
}

参考:https://www.cnblogs.com/sign-ptk/p/6723048.html

nginx location 的配置

nginx location 的配置

一、基本语法:location [=|~|~*|^~] /uri/ { … }

二、分类:

 1. 基本 location:以 “ = ” 或 “ ^~ ” 为前缀或者没有任何前缀的 /uri/ 

 2. 正则 location:以 “ ~ ” 或 “ ~* ” 为前缀的 /uri/

 基本 location 又分为 2 种:

  1)严格精确匹配:  “ = ” 

  2)最大前缀匹配: 无前缀 或者以 “ ^~ ”

三、解释:

  1)= 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。
  2)~ 为区分大小写匹配 (可用正则表达式)
  3)~* 为不区分大小写匹配 (可用正则表达式)
  4)!~ 和!~* 分别为区分大小写不匹配及不区分大小写不匹配
  5)^~ 如果把这个前缀用于一个常规字符串,那么告诉 nginx 如果路径匹配那么不测试正则表达式。

四、规则:

  1. 先匹配普通 location ,再匹配正则 location ,但是如果普通 location 的匹配结果恰好是 “严格精确( exact match )” 的,则 nginx 不再尝试后面的正则 location ;如果普通 location 的匹配结果是 “最大前缀”,则正则 location 的匹配覆盖普通 location 的匹配。

  2. 基本 location 中,严格精确匹配大于最大前缀

  2. 对于普通 location 指令,匹配规则是:最大前缀匹配(与顺序无关),如果恰好是严格精确匹配结果或者加有前缀 “ ^~ ” 或 “ = ”(符号 “ = ” 只能严格匹配,不能前缀匹配),则停止搜索正则 location ;但对于正则 location 的匹配规则是:按编辑顺序逐个匹配(与顺序有关),只要匹配上,就立即停止后面的搜索。

nginx location 配置

nginx location 配置

location 匹配顺序

  1. "=" 前缀指令匹配,如果匹配成功,则停止其他匹配
  2. 普通字符串指令匹配,顺序是从长到短,匹配成功的 location 如果使用 ^~,则停止其他匹配(正则匹配)
  3. 正则表达式指令匹配,按照配置文件里的顺序,成功就停止其他匹配
  4. 如果第三步中有匹配成功,则使用该结果,否则使用第二步结果

注意点

  1. 匹配的顺序是先匹配普通字符串,然后再匹配正则表达式。另外普通字符串匹配顺序是根据配置中字符长度从长到短,也就是说使用普通字符串配置的 location 顺序是无关紧要的,反正最后 nginx 会根据配置的长短来进行匹配,但是需要注意的是正则表达式按照配置文件里的顺序测试。找到第一个比配的正则表达式将停止搜索。

  2. 一般情况下,匹配成功了普通字符串 location 后还会进行正则表达式 location 匹配。有两种方法改变这种行为,其一就是使用 “=” 前缀,这时执行的是严格匹配,并且匹配成功后立即停止其他匹配,同时处理这个请求;另外一种就是使用 “^~” 前缀,如果把这个前缀用于一个常规字符串那么告诉 nginx 如果路径匹配那么不测试正则表达式。

 

匹配模式及顺序  

  location = /uri    = 开头表示精确匹配,只有完全匹配上才能生效。

 

  location ^~ /uri   ^~ 开头对 URL 路径进行前缀匹配,并且在正则之前。

 

  location ~ pattern  ~ 开头表示区分大小写的正则匹配。

 

  location ~* pattern  ~* 开头表示不区分大小写的正则匹配。

 

  location /uri     不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。

 

  location /      通用匹配,任何未匹配到其它 location 的请求都会匹配到,相当于 switch 中的 default。

实验案例

 

 

  测试 "^~" 和 "~",nginx 配置如下。浏览器输入 http://localhost/helloworld/test,返回 601。如将 #1 注释,#2 打开,浏览器输入 http://localhost/helloworld/test,返回 603。注:#1 和 #2 不能同时打开,如同时打开,启动 nginx 会报 nginx: [emerg] duplicate location "/helloworld"...,因为这两个都是普通字符串。

  

location ^~ /helloworld {      #1
    return 601;
}
        
#location /helloworld {        #2
#    return 602;
#}

location ~ /helloworld {
    return 603;
}  

 

  测试普通字符串的长短(普通字符串的匹配与顺序无关,与长短有关)。浏览器输入 http://localhost/helloworld/test/a.html,返回 601。浏览器输入 http://localhost/helloworld/a.html,返回 602。

  

location /helloworld/test/ {        #1
    return 601;
}
        
location /helloworld/ {                #2
    return 602;
}

 

  测试正则表达式的顺序(正则匹配与顺序相关)。浏览器输入 http://localhost/helloworld/test/a.html,返回 602;将 #2 和 #3 调换顺序,浏览器输入 http://localhost/helloworld/test/a.html,返回 603

  

location /helloworld/test/ {        #1
    return 601;
}

location ~ /helloworld {            #2
    return 602;
}
        
location ~ /helloworld/test {        #3
    return 603;
}

 

 

 

 

 

  

 

Nginx location 配置信息

Nginx location 配置信息

Nginx location 配置信息

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

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

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

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

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

location ~* \.(gif|jpg|jpeg)$ {
  # 匹配所有以 gif,jpg或jpeg 结尾的请求
  # 然而,所有请求 /images/ 下的图片会被 config D 处理,因为 ^~ 到达不了这一条正则
  [ configuration E ] 
}

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

location /images/abc {
  # 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在
  # F与G的放置顺序是没有关系的
  [ configuration G ] 
}

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

location ~* /js/.*/\.js

= 开头表示精确匹配
^~ 开头表示uri以某个常规字符串开头,不是正则匹配
~ 开头表示区分大小写的正则匹配
~* 开头表示不区分大小写的正则匹配
/ 通用匹配, 如果没有其它匹配,任何请求都会匹配到

优先级: (location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > ( / )

上面的匹配结果 按照上面的location写法,以下的匹配示例成立:

  • / -> config A

    确完全匹配,即使/index.html也匹配不了

  • /downloads/download.html -> config B

    匹配B以后,往下没有任何匹配,采用B

  • /images/1.gif -> configuration D

    匹配到F,往下匹配到D,停止往下

  • /images/abc/def -> config D

    最长匹配到G,往下匹配D,停止往下
    你可以看到 任何以/images/开头的都会匹配到D并停止,FG写在这里是没有任何意义的,H是永远轮不到的,这里只是为了说明匹配顺序

  • /documents/document.html -> config C

    匹配到C,往下没有任何匹配,采用C

  • /documents/1.jpg -> configuration E

    匹配到C,往下正则匹配到E

  • /documents/Abc.jpg -> config CC

    最长匹配到C,往下正则顺序匹配到CC,不会往下到E

实际使用建议

所以实际使用中,个人觉得至少有三个匹配规则定义,如下:
#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
# 第一个必选规则
location = / {
    proxy_pass http://tomcat:8080/index
}
# 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {
    root /webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
    root /webroot/res/;
}
#第三个规则就是通用规则,用来转发动态请求到后端应用服务器
#非静态文件请求就默认是动态请求,自己根据实际把握
#毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了
location / {
    proxy_pass http://tomcat:8080/
}

Nginx location 配置心得

Nginx location 配置心得

关于nginx location 配置相关资料很多,由于在配置location时候老是出现404 not found,查阅了很多资料,总算是找到了答案。

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

          location /hsc {
            root   /home/hsc/nginx;
            index  index.html;
        }
        location / {
            root   /home/hsc/nginx/hsc;
            index  index.html index.htm;
        }
}
登录后复制
如上一个简单server配置,在浏览器中输入127.0.0.1 和127.0.0.1/hsc其请求的结果是一样都是/home/hsc/nginx/hsc 目录下的index.html

解释下:127.0.0.1 会匹配到 location / 然后 root(表示根目录) 为/home/hsc/nginx/hsc 然后nginx 再去找/后面的内容这里为空,所以就找根目录下的内容。

27.0.0.1/hsc   会匹配到 llocation /hsc 然后 root(表示根目录) 为/home/hsc/nginx 然后nginx 再去找/后面的内容这里为hsc这个目录,所以就会切换到/home/hsc/nginx/hsc目录下。

以上就介绍了Nginx location 配置心得,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

今天关于nginx 的 location 配置详解nginx的location配置详解带/与不带/的区别的分享就到这里,希望大家有所收获,若想了解更多关于nginx location 的配置、nginx location 配置、Nginx location 配置信息、Nginx location 配置心得等相关知识,可以在本站进行查询。

本文标签: