给网站写文章怎么做,四川瑞通工程建设有限公司网站,如何快速做h5网站,wordpress企业网站源码0. 引言 
我们在日常的生产过程中#xff0c;常常有需要重定向转发的需求#xff0c;比如企业更换了域名#xff0c;但又要保证之前的域名能访问#xff0c;这就需要做重定向的跳转。 
我们在之前的章节中学习了Nginx的负载均衡、各类转发代理配置#xff0c;今天继续来补…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指令用于立即结束当前处理块的执行并返回一个状态码给客户端。这个状态码可以是204No Content、400Bad Request到500Server 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、重定向到指定链接 重定向分为临时重定向和永久重定向 永久重定向 301308 表示永久重定向重定向结果会缓存下次请求直接从缓存获取区别在于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;}3、返回一个自定义页面并将参数、uri打印出来 
location /test {default_type text/html;set $name 跳转成功;return 200 htmlp$name/pprequest_uri:$request_uri/ppdocument_uri:$document_uri/ppuri:$uri/ppquery_string:$query_string/ppargs:$args/p/html;}注意要让nginx支持显示中文需要在nginx.conf中配置 
http {...charset utf-8;
}1.2 rewrite 详解 
1.2.1 rewrite 核心概念 
官方文档https://nginx.org/en/docs/http/ngx_http_rewrite_module.html 介绍 Nginx 的 rewrite 模块是一个功能丰富的组件它使得用户能够通过正则表达式对请求的 URI 进行重写。rewrite 模块支持 PCREPerl 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 基本不变的调整urihttp跳转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?post3actionview location ~ /user/view {rewrite /user/(.*)/(.*)/(.*).html /user/$3.jsp?post$2action$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# 是否为内部IPif ($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如何实现企业安全防护