首页 > 云计算 > 虚拟化 > Nginx location匹配及Rewrite重写
(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/ ,如需转载,请注明出处,否则将追究法律责任。