Nginx快速入门:return、rewrite重定向、重写详解(六)

这篇具有很好参考价值的文章主要介绍了Nginx快速入门:return、rewrite重定向、重写详解(六)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0. 引言

我们在日常的生产过程中,常常有需要重定向转发的需求,比如企业更换了域名,但又要保证之前的域名能访问,这就需要做重定向的跳转。

我们在之前的章节中学习了Nginx的负载均衡、各类转发代理配置,今天继续来补充关于转发的的最后一个环节——重定向(或称跳转)

1. 重定向、重写详解

什么是重定向?

重定向是指将客户端的请求从一个URL自动重定向到另一个URL。这通常是通过服务器发送一个特定的HTTP状态码来完成的,告诉客户端(以及搜索引擎)资源已经移动到了新的位置。重定向可以是临时的(302 Found)或永久的(301 Moved Permanently)

一句话概括:重定向转发时浏览器上的地址是会变化的,客户是能感知到的

什么是重写?

重写是指在不改变URL的情况下,修改客户端请求的HTTP请求行(request line)或路径。这通常用于URL的标准化或修改,而不需要告诉客户端资源已经移动。重写通常在服务器配置文件中完成,例如在Nginx的rewrite指令中。

一句话概括:重写转发时浏览器上的地址是会不会变化的,客户是无感的

应用场景:
重定向用于告诉客户端资源已经移动到了新位置
重写用于在不改变客户端URL的情况下修改请求

1.1 return 详解

1.1.1 return 核心概念

介绍:

return指令用于立即结束当前处理块的执行,并返回一个状态码给客户端。这个状态码可以是204(No Content)、400(Bad Request)到500(Server Error)之间的任何值。
return通常用于访问控制、错误处理或配置特定的HTTP响应
该指令可以返回指定的响应码和重定向URL给客户端,也可以返回指定的响应码和文本给客户端

作用域:

server, location, if

语法:

return code [text];
return code URL;
return URL;

return的状态码为301、302、303、307、308时,则为重定向;
return的状态码为其他时,可以返回响应主体[text]。

1.1.2 return 案例

官方文档:https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return

  • 1、返回指定状态码和文本

如果要返回文本,需要指定 default_type application/json;,不配置的话,跳转会默认以下载文件形式

location ~ /user {
    default_type application/json; 
    return 200 "跳转成功";
}
  • 2、重定向到指定链接

重定向分为临时重定向和永久重定向:

永久重定向:
301,308 表示永久重定向,重定向结果会缓存,下次请求直接从缓存获取;区别在于301会进行方法转变,比如一个POST提交的请求,会转换为GET请求转发,而308则会保持原本方法进行转发

临时重定向:
300,该请求有多种可能的响应,浏览器可以选择它们其中的一个。服务器没有任何标准可以遵循去代替用户来进行选择
302,重定向请求转发时使用 GET 方法,不管原请求使用的是何种方法
303,基本跟 302 一致,所以很少用 303,都是使用 302
307,为了补充 302.重定向必须使用原请求的方法和包体访问

location /user/ {
        return 300 "http://www.baidu.com";
    }

或者

location /user/ {
        return "http://www.baidu.com";
    }

nginx return和rewrite,# Nginx快速上手,nginx,运维
nginx return和rewrite,# Nginx快速上手,nginx,运维
3、返回一个自定义页面,并将参数、uri打印出来

location /test {
     default_type text/html;
     set $name 跳转成功;
     return 200 <html><p>$name</p><p>request_uri:$request_uri</p><p>document_uri:$document_uri</p><p>uri:$uri</p><p>query_string:$query_string</p><p>args:$args</p></html>;
 }

注意,要让nginx支持显示中文,需要在nginx.conf中配置:

http {
     ...
    charset utf-8;
}

nginx return和rewrite,# Nginx快速上手,nginx,运维

1.2 rewrite 详解

1.2.1 rewrite 核心概念

官方文档:https://nginx.org/en/docs/http/ngx_http_rewrite_module.html
介绍:

Nginx 的 rewrite 模块是一个功能丰富的组件,它使得用户能够通过正则表达式对请求的 URI 进行重写。rewrite 模块支持 PCRE(Perl Compatible Regular Expressions)正则表达式,这为用户提供了强大的匹配和重写能力。通过正则表达式,用户可以精确地控制哪些请求需要被重写以及重写后的 URI。同时,rewrite 模块还提供了一系列的标记(flag),如 last、break、redirect、permanent 等,以控制重写后的行为,例如是否继续执行后续的重写规则、是否返回重定向响应等。这个功能通常用于以下几种场景:

  • URL 规范化:使 URL 看起来更规范、合理,便于用户记忆和搜索引擎优化。
  • 动态 URL 地址伪装:企业常常将动态 URL 地址伪装成静态地址提供服务,以提高系统的负载能力和用户体验。
  • 域名更换:当网站更换域名时,可以通过 rewrite 指令将旧域名的访问跳转到新域名上,确保用户的访问不会受到影响。
  • 业务调整:在服务端进行某些业务调整时,可能需要通过重写 URL 来实现特定的访问控制或数据分发。

作用域:

server, location, if

语法:

rewrite regex replacement [flag];

可选的flag参数:

  • last

标记表示在执行了当前的重写规则后,继续执行后续的 rewrite 规则或 location 匹配。
它通常用在 server 块或 if 块中,以确保重写规则可以与其他规则组合使用,形成一个规则链。

  • break

标记表示在执行了当前的重写规则后,停止执行后续的所有 rewrite 规则。
它通常用在 location 块中,用于确保一旦某个重写规则匹配并执行后,不会继续执行其他可能存在的重写规则。

  • redirect:

标记表示重写规则执行后,返回一个重定向响应(HTTP 302 状态码)给客户端,而不是继续处理请求。
它用于实现临时性的重定向,比如在网站维护时将用户重定向到另一个地址。

  • permanent

标记表示重写规则执行后,返回一个永久重定向响应(HTTP 301 状态码)给客户端,并且后续的请求应该直接跳转到新的 URI,而不是再次执行重写规则。
它用于实现永久性的重定向,比如在域名更改后,将旧域名重定向到新域名。

301和302的应用场景:
302 需要经常变化跳转路径的uri则使用302
301 基本不变的调整uri(http跳转https、seo)

1.2.2 rewrite 案例

1、替换旧域名xxx.com为新域名yyy.com

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

2、旧域名访问/user/的请求跳转新域名,并且访问在路径上添加/new/


server {
	listen       80;
	server_name  www.xxx.com;		
	charset utf-8;
	
	#添加
	locatoin /user/ {
        rewirte (.+) http://www.newxxx.com/new$1 permanent;		#这里的$1为位置变量,代表/user/
    }
	
	locaiton / {
        root   html;
        index  index.html index.htm;
    }
}

3、将动态链接改为伪静态链接(看起来像是静态链接的地址)

用户访问:www.xxx.com/user/view/3/index.html
实际地址:http://www.xxx.com/user/index.jsp?post=3&action=view

location ~ /user/view {
    rewrite /user/(.*)/(.*)/(.*).html /user/$3.jsp?post=$2&action=$1 last;
}
$N 表示第几个括号中的变量

4、业务新版本上线,要求所有 IP 访问任何内容都显示一个维护页面,只有允许 IP 192.168.244.2访问后台业务

先创建维护页面

ehho "<h1>系统升级中... 持续时间 2023-12-24 23:00:00 -2023-12-24 23:50:00 </h1>" > /var/www/html/system.html

修改配置

server {
	listen       80;
	server_name  www.xxx.com;		
	charset utf-8; # 显示中文
 
	# 是否转发标记
    set $rewrite true;							#设置变量$rewrite,变量值为boole值true
    # 是否为内部IP
	if ($remote_addr = "192.168.244.2"){		
        set $rewrite false;
    }
	# 跳转维护页面
    if ($rewrite = true){						
        rewirte (.+) /system.html;				#将域名后边的路径重写成/system.html
    }
    location = /system.html {
        root /var/www/html;						#网页返回维护页面
    }
	
	location / {
        root   html;
        index  index.html index.htm;
    }
}

5、项目升级,但部分jsp链接未升级,需要将所有.jsp访问转发到原项目

location ~* .*\.jsp {
        rewrite (.+) http://www.old.xxx.com$1 permanent;
}

2. 总结

本章,我们重点讲解了重定向和重写的区别,并且讲解了return,rewrite的用法,用实际的案例进行了演示,下一节我们将展示nginx如何实现企业安全防护文章来源地址https://www.toymoban.com/news/detail-828657.html

到了这里,关于Nginx快速入门:return、rewrite重定向、重写详解(六)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • nginx rewrite(重定向)

    目录 一、什么是rewrite 二、rewrite使用场景 三、rewrite配置语法 四、常用的nginx正则表达式 五、nginx 配置文件里 location 项 1、localtion 作用 2、location 可以分为三类 3、location 的常用匹配规则 4、location 的 优先级与匹配规则 5、location 示例说明 六、案例 七、rewrite总结        R

    2024年02月11日
    浏览(36)
  • Nginx重写功能location与rewrite

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

    2024年01月20日
    浏览(42)
  • Nginx rewrite地址重写(十个例子详细解析)

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

    2024年04月27日
    浏览(30)
  • nginx重定向问题解决(rewrite or internal redirection cycle)

    访问日志文件 nginx.conf配置文件内容 根据提供的访问日志和nginx.conf配置文件分析,是循环重定向的问题。 配置中,location / 块使用了 try_files $uri $uri/ /index.html; 会导致导致在尝试访问根目录时发生重定向循环。 修改:添加一个新的 location=/index 块,直接提供 /index.html 而不进行

    2024年02月05日
    浏览(68)
  • Nginx Rewrite详解

    目录 一、Rewrite跳转场景 二、Rewrite跳转实现 三、Rewrite实际场景 1.nginx跳转需求的实现方式: 2.rewrite放在server{},if{},location{}段中 3.对域名或参数字符串 四、Rewrite正则表达式 五、Rewrite命令/语法格式 六、Location分类 1. location 大致可以分为三类: 2.location 常用的匹配规则:

    2024年02月07日
    浏览(37)
  • nginx http rewrite module 详解

    大家好,我是 17。 今天和大家聊聊 nginx http rewrite module 。 简单来说, ngx_http_rewrite_module module 用正则匹配请求,改写请求,然后做跳转。可以是内部跳转,也可以是外部跳转。 学习这个模块的时候,把 rewrite_log 打开,可以在 error log 里查看跳转信息 注意 notice 是必须的 直接

    2023年04月08日
    浏览(37)
  • 分布式 - 服务器Nginx:一小时入门系列之 rewrite 指令

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

    2024年02月11日
    浏览(54)
  • Nginx快速入门:nginx各类转发、代理配置详解|location、proxy_pass参数详解(五)

    咱们上节讲解了nginx的负载均衡配置,但是还有很多其他的转发情况,包括不同路径转发至不同的业务服务,通配符识别路径转发等。 今天一起来学习nginx的转发配置 首先我们要了解nginx进行转发代理的核心在于两处,一是入口,二是出口;入口就是url路径匹配识别对应的路

    2024年01月20日
    浏览(40)
  • 分布式 - 服务器Nginx:一小时入门系列之 return 指令

    1. return 指令语法 return指令用于立即停止当前请求的处理,并返回指定的HTTP状态码和响应头信息,它可以用于在Nginx中生成自定义错误页面,或者在Nginx中重定向到另一个URL,它的语法如下: 其中,code 是 HTTP 状态码,可以是 2xx、3xx、4xx 或 5xx 等。text 是可选的文本信息,用于

    2024年02月11日
    浏览(44)
  • 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日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包