Nginx重写功能location与rewrite

这篇具有很好参考价值的文章主要介绍了Nginx重写功能location与rewrite。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. location

从功能看 rewrite 和 location 似乎有点像,都能实现跳转,主要区别在于 rewrite 是在同一域名内更改获取资源的路径,而 location 是对一类路径做控制访问或反向代理,还可以proxy_pass 到其他机器。

rewrite 对访问的域名或者域名内的URL路径地址重写。
location 对访问的路径做访问控制或者代理转发。

1.1location类别

精准匹配:location = / {}

一般匹配:location / {}

正则匹配:location ~ / {}

常用正则表达式

匹配符    表示含义
^    匹配输入字符串的起始位置
$    匹配输入字符串的结束位置
*    匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”
+    匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”
?    匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”
.    表示任意一个字符
\转义字符    用于取消特殊符号的含义
\d    匹配纯数字
\s    匹配空的(空格或者制表符)
{n}    匹配前面的子表达式n次
{n,}    匹配前面的子表达式不少于n次
{n,m}    匹配前面的子表达式n到m次
[ ]    匹配括号中的一个字符
[c]    匹配单个字符 c
[a-z]    匹配 a-z 小写字母的任意一个
[a-zA-Z0-9]    匹配所有大小写字母或数字
()    表达式的开始和结束位置
|    或运算符

1.2 常用的匹配规则

规则表达式    规则含义
=    进行普通字符精确匹配。也就是完全匹配
^~    表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他 location
~    表示执行一个正则匹配,区分大小写
~*    表示执行一个正则匹配,不区分大小写
!~    表示执行一个正则匹配,区分大小写不匹配
!~*    表示执行一个正则匹配,不区分大小写不匹配

1.3 location 优先级

  • 首先精确匹配 =
  • 其次前缀匹配 ^~
  • 其次是按文件中顺序的正则匹配 ~或~*
  • 然后匹配不带任何修饰的前缀匹配
  • 最后是交给 / 通用匹配
location 示例说明:
(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 文件,如果和正则location ~ /images/abc/1.html 相比,正则优先级更高

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

location 匹配
首先看 优先级:精确= > 前缀^~ > 正则~,~* > 一般 > 通用/
优先级相同:正则看上下顺序,上面的优先;一般匹配看长度,最长匹配的优先
精确、前缀、正则、一般 都没有匹配到,最后再看通用匹配

2. rewrite

rewrite功能

rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。
比如:更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。

rewrite只能放在server{},location{},if{}中,并且默认只能对域名后边的除去传递的参数外的字符串起作用,
例如 http://www.kgc.com/abc/bbs/index.php?a=1&b=2 只对/abc/bbs/index.php重写。
 

2.1 rewrite跳转实现

Nginx:通过ngx_http_rewrite_module 模块支持URL重写、支持if条件判断,但不支持else
跳转:从一个 location跳转到另一个location,循环最多可以执行10次,超过后nginx将返回500错误
PCRE支持:perl兼容正则表达式的语法规则匹配
重写模块 set 指令:创建新的变量并设其值

2.2 执行顺序

rewrite 执行顺序如下:
(1) 执行 server 块里面的 rewrite 指令。
(2) 执行 location 匹配。
(3) 执行选定的 location 中的 rewrite 指令。

2.3 跳转实现


Nginx:通过ngx_http_rewrite_module 模块支持URL重写、支持if条件判断,但不支持else
跳转:从一个 location跳转到另一个location,循环最多可以执行10次,超过后nginx将返回500错误
PCRE支持:perl兼容正则表达式的语法规则匹配
重写模块 set 指令:创建新的变量并设其值
 

2.4 语法格式

rewrite <regex> <replacement> [flag];
regex :表示正则匹配规则。
replacement :表示跳转后的内容。
flag :表示 rewrite 支持的 flag 标记。

3. 实例:

基于域名的跳转
现在公司旧域名www.kgc.com有业务需求变更,需要使用新域名www.benet.com代替,但是旧域名不能废除

修改主配置文件

vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.kgc.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.kgc.com-access.log;		#日志修改
	location / {
	#添加域名重定向
        if ($host = 'www.kgc.com'){						#$host为rewrite全局变量,代表请求主机头字段或主机名
			rewrite ^/(.*)$ http://www.benet.com/$1 permanent;	#$1为正则匹配的内容,即“域名/”之后的字符串
        }
        root   html;
        index  index.html index.htm;
    }
}


echo "192.168.66.10 www.kgc.com www.benet.com" >> /etc/hosts
systemctl restart nginx

Nginx重写功能location与rewrite,nginx,服务器,linux

创建所需目录及文件

Nginx重写功能location与rewrite,nginx,服务器,linux

网页验证

浏览器输入模拟访问 http://www.kgc.com/test/1.html(虽然这个请求内容是不存在的)
会跳转到www.benet.com/test/1.html,查看元素可以看到返回301,实现了永久重定向跳转,而且域名后的参数也正常跳转。

Nginx重写功能location与rewrite,nginx,服务器,linux

2. 基于客户端 IP 访问跳转
今天公司业务新版本上线,要求所有 IP 访问任何内容都显示一个固定维护页面,只有公司 IP :192.168.66.10访问正常。

vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.kgc.com;		#域名修改	
	charset utf-8;
	access_log  /var/log/nginx/www.kgc.com-access.log;		#日志修改

	#设置是否合法的IP标记
    set $rewrite true;							#设置变量$rewrite,变量值为boole值true
    #判断是否为合法IP
	if ($remote_addr = "192.168.66.10"){		#当客户端IP为192.168.80.10时,将变量值设为false,不进行重写
        set $rewrite false;
    }
	#除了合法IP,其它都是非法IP,进行重写跳转维护页面
    if ($rewrite = true){						#当变量值为true时,进行重写
        rewrite (.+) /weihu.html;				#将域名后边的路径重写成/weihu.html后转发,例如www.kgc.com/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,服务器,linux

设置维护界面并重启服务

vim /var/www/html/weihu.html

Nginx重写功能location与rewrite,nginx,服务器,linux

Nginx重写功能location与rewrite,nginx,服务器,linux

使用192.168.66.20访问时:

Nginx重写功能location与rewrite,nginx,服务器,linux

使用192.168.66.10访问时

Nginx重写功能location与rewrite,nginx,服务器,linux文章来源地址https://www.toymoban.com/news/detail-809634.html

到了这里,关于Nginx重写功能location与rewrite的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Nginx location匹配优先级 与 Rewrite

    从功能看 rewrite 和 location 似乎有点像,都能实现跳转,主要区别在于 rewrite 是在同一个域名内更改获取资源的路径,而 location 是对一类路径做控制访问或反向代理 ,还可以 proxy_pass 到其它机器。 rewrite 对访问的域名或者域名内的URL路径地址重写 location 对访问的路径做访问控

    2024年02月08日
    浏览(40)
  • nginx的location与rewrite作用与用法

    nginx rewrite 重写跳转 location 匹配uri location 匹配的规则和优先级。重点 nginx常用的变量,要求掌握 rewrite:重定向功能。掌握,理解。 local location 匹配: 正则表达式: 元字符: .:任意单个字符,包括汉字 .(表示就是一个点) ^:起始位置 $:结束位置 *:匹配前面的字符0次或

    2024年02月13日
    浏览(25)
  • Nginx rewrite地址重写(十个例子详细解析)

    Rewrite在nginx中也叫URL Rewrite,即URL重写,就是把传入Web的请求重定向到其他URL的过程 从安全角度考虑,使用Rewrite在Nginx中具有一些重要的作用和优势,包括: 隐藏真实目录结构: 使用Rewrite可以隐藏服务器上的真实文件路径和目录结构,防止攻击者通过直接访问文件路径来获

    2024年04月27日
    浏览(23)
  • Nginx快速入门:return、rewrite重定向、重写详解(六)

    我们在日常的生产过程中,常常有需要重定向转发的需求,比如企业更换了域名,但又要保证之前的域名能访问,这就需要做重定向的跳转。 我们在之前的章节中学习了Nginx的负载均衡、各类转发代理配置,今天继续来补充关于转发的的最后一个环节——重定向(或称跳转)

    2024年02月20日
    浏览(31)
  • Location匹配与Rewrite重写

    1.location大致可以分为三类: 精准匹配:location = / {} 一般匹配:location / {} 正则匹配:location ~ / {} 2.location常用的匹配规则:   = :进行普通字符精确匹配,也就是完全匹配。 ^~ :表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 location。 ~ :区分大小写的

    2024年02月13日
    浏览(28)
  • 分布式 - 服务器Nginx:一小时入门系列之 rewrite 指令

    1. rewrite 指令语法 nginx的rewrite指令用于重写URL,可以将一个URL重写为另一个URL。它的语法如下: 其中,regex是一个正则表达式,用于匹配需要重写的URL;replacement是重写后的URL;flag是可选的标志,用于控制重写的行为。flag 的常见取值为 last 和 break,都是用于控制重写规则执

    2024年02月11日
    浏览(44)
  • Nginx地址重写功能

    📒博客主页: 微笑的段嘉许博客主页 💻微信公众号:微笑的段嘉许 🎉欢迎关注🔎点赞👍收藏⭐留言📝 📌本文由微笑的段嘉许原创! 📆CSDN首发时间:🌴2022年2月日21🌴 ✉️坚持和努力一定能换来诗与远方! 🙏作者水平很有限,如果发现错误,一定要及时告知作者哦

    2024年02月05日
    浏览(25)
  • Linux服务——nginx重写功能与反向代理

    目录 一、nginx重写功能 if指令  return指令 set指令 break指令 rewrite指令 防盗链 二、反向代理 反向代理参数 反向代理——缓存功能 反向代理——ip穿透 反向代理——动静分离 反向代理——负载均衡 Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求,此功能依靠 PCR

    2024年02月10日
    浏览(28)
  • 分布式 - 服务器Nginx:基础系列之Nginx静态资源配置指令server_name | listen | location | root | alias | index| error_page

    通过浏览器发送一个HTTP请求实现从客户端发送请求到服务器端获取所需要内容后并把内容回显展示在页面。这个时候,我们所请求的内容就分为两种类型,一类是静态资源、一类是动态资源。静态资源即指在服务器端真实存在并且能直接拿来展示的一些文件,比如常见的ht

    2024年02月04日
    浏览(36)
  • Nginx服务之Rewrite

    目录 一、Rewrite实际场景 1、Nginx跳转需求的实现方式 2、rewrite放在server{},if{}, location{}段中 3、对域名或参数字符串 二、Nginx 正则表达式 三、Rewrite命令 四、Location 分类 1、分类  2、正则匹配的常用表达式 3、location 优先级 4、Nginx在实际网站中至少有三个匹配规则定义 4.1第

    2024年02月14日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包