ITPub博客

首页 > 云计算 > 虚拟化 > Nginx location匹配及Rewrite重写

Nginx location匹配及Rewrite重写

虚拟化 作者:chw_throx 时间:2022-03-09 18:14:06 0 删除 编辑




(1)location = / {}

=为精确匹配 / ,主机名后面不能带任何字符串,比如访问 / 和 /data,则 / 匹配,/data 不匹配

再比如 location = /abc,则只匹配/abc ,/abc/或 /abcd不匹配。若 location  /abc,则即匹配/abc 、/abcd/ 同时也匹配 /abc/。


(2)location / {}

因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 比如访问 / 和 /data, 则 / 匹配, /data 也匹配,

但若后面是正则表达式会和最长字符串优先匹配(最长匹配)


(3)location /documents/ {}

匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索其它 location

只有其它 location后面的正则表达式没有匹配到时,才会采用这一条


(4)location /documents/abc {}

匹配任何以 /documents/abc 开头的地址,匹配符合以后,还要继续往下搜索其它 location

只有其它 location后面的正则表达式没有匹配到时,才会采用这一条


(5)location ^~ /images/ {}

匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条


(6)location ~* \.(gif|jpg|jpeg)$ {}

匹配所有以 gif、jpg或jpeg 结尾的请求

然而,所有请求 /images/ 下的图片会被 location ^~ /images/ 处理,因为 ^~ 的优先级更高,所以到达不了这一条正则


(7)location /images/abc {}

最长字符匹配到 /images/abc,优先级最低,继续往下搜索其它 location,会发现 ^~ 和 ~ 存在


(8)location ~ /images/abc {}

匹配以/images/abc 开头的,优先级次之,只有去掉 location ^~ /images/ 才会采用这一条


(9)location /images/abc/1.html {}

匹配/images/abc/1.html 文件,如果和正则 ~ /images/abc/1.html 相比,正则优先级更高


三、rewrite

Ⅰ、介绍

rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。

比如:更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。

rewrite只能放在server{ ) ,location } ,if{ }中,并且默认只能对域名后边的除去传递的参数外的字符串起作用,

例如http:// www . kac.com/abc/bbs/index.php?a=1&b=2只对/abc/bbs/index.php重写。


Ⅱ、rewrite跳转场景

调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求。

为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。

网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的360buy.com 会跳转到 jd.com。

服务端某些业务调整,比如根据特殊变量、目录、客户端的信息进行URL调整等。

Ⅲ、跳转实现



Nginx:通过ngx _http_rewrite_module模块支持URL重写、支持if条件判断,但不支持else

跳转:从一个location跳转到另一个location,循环最多可以执行10次,超过后nginx将返回500错误

PCRE支持: perl兼容正则表达式的语法规则匹配

重写模块set指令:创建新的变量并设其值

Ⅳ、执行顺序

执行server块里面的rewrite指令。

执行location匹配。

执行选定的location中的rewrite指令。

格式:

rewrite <regex> <replacement> [ flag] ;

#regex :表示正则匹配规则。   #replacement :表示跳转后的内容。     #flag :表示rewrite支持的flag标记。

1.

2.

3.

flag标记说明 作用

last 本条规则匹配完成后,继续向下匹配新的location URI规则,一般用在 server 和 if 中。

break 本条规则匹配完成即终止,不再匹配后面的任何规则,一般使用在 location 中

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

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

Ⅴ、实际场景

基于域名跳转


现在公司旧域名有业务需求变更,需要使用新域名代替,但是旧域名不能废除,需要跳转新域名上,而且后面的参数保持不变。


vim /usr/local/nginx/conf/nginx.conf

server {

listen       80;

server_name  ; #域名修改

charset utf-8;

access_log  /var/log/nginx/.access.log; #日志修改

location / {

#添加域名重定向

        if ($host = ''){             #$host为rewrite全局变量,代表请求主机头字段或主机名

rewrite ^/(.*)$ http:///$1 permanent; #$1为正则匹配的内容,即域名后边的字符串

        }

        root   html;

        index  index.html index.htm;

    }

}

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

mkdir -p /var/log/ngin   #嵌套创建nginx目录

systemctl restart nginx.service

echo "192.168.239.10 " >> /etc/hosts

systemctl restart nginx.service   #重启nginx服务

1.

2.

3.

4.

基于客户端IP访问跳转


今天公司业务新版本上线,要求所有IP访问任何内容都显示一个固定维护页面,只有IP:192.168.239.10访问正常


vim /usr/local/nginx/conf/nginx.conf

server {

listen       80;

server_name  ; #域名修改

charset utf-8;

access_log  /var/log/nginx/-access.log  main; #日志修改


#设置是否合法的IP标记

    set $rewrite true; #设置变量$rewrite,变量值为boole值true

    #判断是否为合法IP

if ($remote_addr = "192.168.184.10"){ #当客户端IP为192.168.184.10时,将变量值设为false,不进行重写

        set $rewrite false;

    }

#除了合法IP,其它都是非法IP,进行重写跳转维护页面

    if ($rewrite = true){ #当变量值为true时,进行重写

        rewrite (.+) /weihu.html; #重写在访问IP后边插入/weihu.html,例如192.168.184.11/weihu.html

    }

    location = /weihu.html {

        root /var/www/html; #网页返回/var/www/html/weihu.html的内容

    }

location / {

        root   html;

        index  index.html index.htm;




Nginx中location匹配及rewrite重写

目录一、常用的Nginx正则表达式二、location2.1、location三类匹配类型2.2、常用的匹配规则2.3、location优先级2.3.1、举例说明2.4、实际网站使用中,至少有三个匹配规则定义2.4.1、第一个必选规则2.4.2...



Nginx的location匹配与rewrite重写跳转

# Nginx的location匹配与rewrite重写跳转## 常用的Nginx正则表达式| 正则表达式 | 介绍 || :---------: | :--------------------------------------...


nginx location匹配及rewrite规则

location匹配规则1. 实例 server{ location = \ { [配置A] } location / { [配置B] } location = /images/ { [配置C] } location ^~ /static/{ ...



Nginx中的location匹配与rewrite重写跳转(八)

# 常见的Nginx正则表达式~~~^ :匹配输入字符串的起始位置$ :匹配输入字符串的结束位置* :匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”+ :匹配前面的字符一次或多次。如“ol+”能匹配...



Web之Nginx中的location匹配与rewrite重写跳转

@[toc](目录## 一、常见的Nginx正则表达式- 正则之前的博客中也有写到,这里在提一下,很重要。```^ :匹配输入字符串的起始位置$ :匹配输入字符串的结束位置* :匹配前面的字符零次或多次。如“ol*”能匹配...


web服务之Nginx中的location匹配与rewrite重写跳转

# 一、常见的Nginx正则表达式- 正则之前的博客中也有写到,这里在提一下,很重要。```shell^ :匹配输入字符串的起始位置$ :匹配输入字符串的结束位置* :匹配前面的字符零次或多次。如“ol*”能匹配“o”及...


Nginx Rewrite跳转与Location匹配规则

常用的Nginx正则表达式字符涵义以及示例^ 匹配输入字符串的起始位置$ 匹配输入字符串的结束位置* 匹配前面的字符零次或多次;如“ol*”能匹配“o”及“ol”、“oll”+匹配前面的字符一次或多次;如“o...



Nginx Rewrite 与 Location 的网页匹配

# Nginx Rewrite 与 Location 的网页匹配## 1、常见的Nginx正则表达式```^ :匹配输入字符串的起始位置$ :匹配输入字符串的结束位置* :匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”+...


Nginx自学手册(三)location匹配,rewrite

   (一)Nginx location(一)Nginx Location location语法规则Syntax:location [ = | ~ | ~* | ^~ ] uri { ... }location @name&nbs...



Nginx之正则表达式、location匹配简介以及rewrite重写

一、常见的Nginx正则表达式^ :匹配输入字符串的起始位置$ :匹配输入字符串的结束位置* :匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”+ :匹配前面的字符一次或多次。如“ol+”能匹配...


Nginx Location配置总结及rewrite

 参考来源: http://blog.zol.com.cn/1067/article_1066186.html,http://flandycheng.blog.51cto.com/855176/280121语法规则: location [=|~|~*|^~] /uri/ { … }= 开头表示精确匹配^~ ...


nginx 重写 rewrite 基础及实例

nginx rewrite 正则表达式匹配大小写匹配~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配-f和!-f用来判断是否存在文件 -d和!-d用...



Nginx Rewrite(重写)

# Nginx Rewrite(重写)```==常用的Nginx正则表达式==^:匹配输入字符串的起始位置$:匹配输入字符串的结束位置*:匹配前面的字符零次或多次。如“o1*" 能匹配"o”及“ol”、“oll”+ :匹配前面的字符一次或多...



Nginx Rewrite(重写)

1.常用的Nginx正则表达式^ : 匹配输入字符串的起始位置$ : 匹配输入,字符串的结束位置* : 匹配前面的字符零次或多次。如“o1*” 能匹配“o”及“ol”、“oll”+ : 匹配前面的字符一次或多次。如“o1+" 能匹配“ol"...



基于Nginx Rewrite 与 Location 的网页匹配 跳转

一、常用的Nginx 正则表达式字符涵义以及示例^ 匹配输入字符串的起始位置$ 匹配输入字符串的结束位置* 匹配前面的字符零次或多次;如“ol*”能匹配“o”及“ol”、“oll”+匹配前面的字符一次或多次;...


nginx配置 location及rewrite规则详解

location正则写法语法规则:location [=|~|~*|^~] /uri/ { … }=    开头表示精确匹配^~  开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以...


Nginx Rewrite与Location

Nginx Rewrite与Location一、常用的Nginx正则表达式1、正则表达^∶匹配输入字符串的起始位置$ ∶匹配输入字符串的结束位置*∶匹配前面的字符零次或多次。如"ol*"能匹配"o"及"ol"、"oll"+ ∶匹配前面的字符一...


Nginx location&rewrite

Nginx的Location可以有以下几个匹配:1. =   严格匹配这个查询。如果找到,停止搜索。 2. ^~ 匹配路径的前缀,如果找到,停止搜索。3. ~   为区分大小写的正则匹配   4. ~* 为不区分...


nginx 重写 rewrite 基础及实例(转)

nginx rewrite 正则表达式匹配大小写匹配~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配-f和!-f用来判断是否存在文件 -d和!-d用来判断是否存在目...



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22198239/viewspace-2868738/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-04-02

  • 博文量
    11
  • 访问量
    7616