Nginx Location和Rewrite深入剖析

Nginx由内核和模块组成,其中内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端的请求映射到一个location block,而location是Nginx配置中的一个指令,用于访问的URL匹配,而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。

location功能是由ngx_http_index_module模块提供的。

location常放在server上下文。

location匹配与location的放置顺序无关,而是与location匹配规则的优先级有关。

常见的location匹配的URL方式如下:

符号解释
=   字面精确匹配,精确到文件  
^~   URL的前缀匹配,不支持正则  
~   正则匹配检查,区分大小写  
~*   正则匹配检查,不区分大小写  
/   不带任何前缀  

location匹配优先级如下:

(location =) > (location 完整路径)> (location ^~) > (location ~) > (location ~*) > ( location部分起始路径) > (location / )

Nginx Location规则案例:

1.只会匹配/,优先级比location / 低,= file 匹配到file的优先级最高。

location =/ {  [ configuration L1  ]  }

2.直接匹配到到file,优先级最高。

location =/index.html {  [ configuration L2  ]  }

3.可以匹配任何请求,但是因为从 / 开始匹配,所有优先级最低。

location / {  [ configuration L3  ]  }

4.匹配任何以/p_w_picpaths/开始的请求,并且停止匹配其他的loation;

location = /p_w_picpaths/ {  [ configuration L4 ]  }

5.匹配以html、txt、gif、jpg、jpeg结尾的URL文件请求, 但是所有/p_w_picpaths/目录的请求将由 [Configuration L4]处理。

location ~* \.(html|txt|gif|jpg|jpeg)$ {    [ configuration L5]  }

浏览器发起HTTP Request URI案例与Location规则案例匹配如下:

/ -> 匹配configuration L3; /index.html 匹配configuration L2;  /p_w_picpaths/ 匹配configuration L4; /p_w_picpaths/logo.png 匹配configuration L4; /img/test.jpg 匹配configuration L5。

生产环境中无需在Nginx.conf配置文件中同时添加五种规则匹配,如下为企业生产环境Nginx Location部分配置代码:

#匹配/,优先级最低
location /
{
    root /var/www/html/;
 expires      60d;
}
#匹配静态页面,由本地解析
location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
{
 root /var/www/html/; 
 expires      60d;     
}
#匹配动态页面,交给后端服务器
location ~ .*\.(jsp|php|cgi|do)$
{
    root /var/www/html/;
    proxy_pass ;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_set_header Host  $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   
}
#直接匹配newindex.html,优先级最高
location =/newindex.html
{
    root /var/www/newwww/;
 expires      60d;
}

Nginx Rewrite

Rewirte规则也称为规则重写,主要功能是实现浏览器访问HTTP URL的跳转,其正则表达式是基于Perl语言。通常而言,几乎所有的WEB服务器均可以支持URL重写。

Rewrite URL规则重写的用途:

对搜索引擎优化(Search Engine Optimization,SEO)友好,利于搜索引擎抓取网站页面;

隐藏网站URL真实地址,浏览器显示更加美观;

网站变更升级,可以基于Rewrite临时重定向到其他页面。

Nginx Rewrite是由ngx_http_rewrite_module模块提供;

Nginx Rewrite可以使用正则替换URL,返回重定向页面。

Nginx Rewrite是按顺序进行匹配的。

Nginx Rewrite放在server,location,if上下文。

Nginx Rewrite规则使用中有三个概念需要理解,分别是:Rewrite结尾标识符、Rewrite规则常用表达式、Nginx Rewrite变量,如下为三个概念的详解:

Rewrite结尾标识符:由于Rewrite规则末尾,表示规则的执行属性。

1.last :相当于Apache里的(L)标记,表示完成rewrite匹配,匹配完成后还会向下继续匹配。

2.break:本条规则匹配完成后,终止匹配,不再匹配后面的规则.

3.redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址。

4.permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址。

其中last和break用来实现URL重写时,浏览器地址栏URL地址不变。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/8a527639c9adcc923d40bcbfbf5b4767.html