首页 > 系统相关 >Nginx Rewrite

Nginx Rewrite

时间:2024-06-03 21:34:16浏览次数:15  
标签:abc 匹配 Rewrite rewrite Nginx 域名 location 跳转

目录

1.Nginx正则表达式

2.location概述

2.1 location匹配规则

2.2 location优先级

3.rewrite概述

4.rewrite实例操作

4.1 基于域名的跳转

4.2 基于客户端 IP 访问跳转

4.3 基于旧域名跳转到新域名后面加目录

4.4 基于参数匹配的跳转

4.5 基于目录下所有php结尾的文件跳转

4.6 基于最普通一条url请求的跳转


1.Nginx正则表达式

2.location概述

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

  • rewrite对用户的URL访问路径进行重写,再重定向跳转访问重写后的路径
  • location通过前缀或正则匹配用户的URL访问路径做页面跳转、访问控制和代理转发

location大致可以分为三类:

  • 精准匹配:location = / {…}
  • 一般匹配:location / {…}
  • 正则匹配:location ~ / {…}

2.1 location匹配规则

2.2 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匹配总结:

首先看优先级:精确= > 前缀^~ > 正则~,~* > 一般 前缀匹配> 通用/

在没有精准匹配的情况下,先看前缀匹配的长度,取最长匹配的location(如果最长的前缀匹配带有^~,则不再看其它正则匹配location;如果最长的前缀匹配是没有^~的,则会继续再看正则匹配)。

前缀匹配看长度,最长的优先匹配;正则匹配看上下顺序 ,根据nginx配置文件的配置由上往下依次匹配 ,匹配到即停止。

3.rewrite概述

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

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

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

rewrite跳转实现:

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

rewrite执行顺序如下:

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

语法格式:rewrite <regex> <replacement> [flag];

regex:表示正则匹配规则,用来传递参数。
replacement:表示跳转后的内容。
flag:表示rewrite支持的flag标记。

flag标记说明

4.rewrite实例操作

4.1 基于域名的跳转

(1)访问http://www.xy101.com/scj.jpg跳转http://www.xy101.com/error.png


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


4.2 基于客户端 IP 访问跳转

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



4.3 基于旧域名跳转到新域名后面加目录

现在访问的是http://nba.xy101.com/scj.html现在需要将这个域名下面的访问都跳转到http://www.xy101.com/nba/scj.html。



4.4 基于参数匹配的跳转

现在访问http://www.xy101.com/100-(100|200)-100.html,跳转到http://www.xy101.com页面。


4.5 基于目录下所有php结尾的文件跳转

要求访问 http://www.xy101.com/upload/123.php 跳转到首页。

4.6 基于最普通一条url请求的跳转

要求访问一个具体的页面如 http://www.xy101.com/abc/123.html 跳转到首页

标签:abc,匹配,Rewrite,rewrite,Nginx,域名,location,跳转
From: https://blog.csdn.net/2402_83805984/article/details/139405171

相关文章

  • 从零手写实现 nginx-01-为什么不能有 java 版本的 nginx?
    前言大家好,我是老马。很高兴遇到你。作为一个java开发者,工作中一直在使用nginx。却发现一直停留在使用层面,无法深入理解。有一天我在想,为什么不能有一个java版本的nginx呢?一者是理解nginx的设计灵魂,再者java开发者用java语言的服务器不是更加自然吗。于是动手开......
  • nginx实现网页缓存防篡改
    简介使用网站防篡改对指定的敏感页面设置缓存,缓存后即使源站页面内容被恶意篡改,WAF也会向访问者返回预先缓存好的页面内容,确保用户看到正确的页面。启用 网页防篡改、敏感信息防泄露开关,才能使用该功能。填写精确的要防护的路径,可以防护该路径下的text、html和图片等内容......
  • Nginx设置反向代理
    源码编译安装Nginx参考:https://i.cnblogs.com/posts/edit-done;postId=9010150;isPublished=false设置include因为反向代理主机较多设置include可以模块化各个主机nginx配置文件#sed'/#/d'/usr/local/nginx/conf/nginx.conf|sed'/^$/d'worker_processes1;events{......
  • awk统计访问nginx日志次数
    ###查询nginx日志的访问IP次数[root@localhostnginx]#awk'{a[$3]++}END{for(vina)printv,a[v]}'access.log|grep192.168.1.33192.168.1.3338018[root@localhostnginx]####查询nginx的状态码次数,统计192.168.1.33、192.168.1.10访问日志里面的状态码次数[root@loca......
  • Nginx配置负载均衡
    负载均衡是一种将请求均匀分发到多个服务器上,以提高系统的可用性和性能的技术。在Nginx中配置负载均衡可以通过使用upstream模块实现。以下是一个简单的Nginx配置负载均衡的示例:1.首先,在Nginx的配置文件中定义一个upstream块,用于指定负载均衡的服务器列表和负载均衡算法。例......
  • Nginx实现缓存
    目录资源列表基础环境关闭防火墙关闭内核安全机制修改主机名一、安装httpd二、安装nginx准备nginx源配置nginx启动部分页面不缓存(可选)测试在client节点请求nginx关闭httpd请求nginx        本文详细记录了nginx实现缓存的配置步骤,nginx是一个非常优秀......
  • Nginx网络服务
    一.nginx介绍Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。它在性能、稳定性、丰富的功能和低系统资源消耗等方面表现优异,因此被广泛应用于互联网的各个领域。功能介绍:HTTP服务器功能:Nginx最常见的用途之一是作为HTTP服务器。它可......
  • Nginx网站服务
    目录一、Nginx服务基础二、Nginx访问控制三、Nginx虚拟主机四、编译安装Nginx服务1.关闭防火墙,将安装nginx所需软件包传到/opt目录下2.安装依赖包3.创建运行用户、组(Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)4.编译......
  • Docker环境下部署Tomcat、Nginx
    docker部署常见应用-Tomcat&Nginx为了简便先禁用防火墙systemctlstopfirewalld部署基本流程搜索镜像——拉取镜像——创建专用目录——运行容器——测试部署Tomcat1.搜索镜像dockersearchtomcat2.拉取镜像dockerpulltomcat3.创建tomcat专用目录#我......
  • Nginx网站服务
    关于NginxNginx是一款高性能、轻量级web服务软件Nginx是一个轻量级/高性能的反向代理Web服务器,用于HTTP、HTTPS、SMTP、POP3和IMAP协议。他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx网站用户有很多,例如:新浪、......