推广 热搜: 公司  快速  上海  中国  未来    企业  政策  教师  系统 

Nginx重写功能和反向代理的用法详解

   日期:2024-11-17     作者:xinet    caijiyuan   评论:0    移动:http://dfvalve.xrbh.cn/mobile/news/10275.html
核心提示:1.1 if 指令用于条件匹配判断,并根据条件判断结果选择不同的Nginx配置,可以配置在server或location块中进行配置,Nginx的if语

1.1 if 指令

用于条件匹配判断,并根据条件判断结果选择不同的Nginx配置,可以配置在server或location块中进行配置,Nginx的if语法仅能使用if做单次判断,不支持使用if else或者if elif这样的多重判断,用法如下:

Nginx重写功能和反向代理的用法详解

使用正则表达式对变量进行匹配,匹配成功时if指令认为条件为true,否则认为false,变量与表达式之间使用以下符号链接:

示例:

① 修改子配置文件

② 访问页面

1.2 return 指令

return用于完成对请求的处理,并直接向客户端返回响应状态码,比如:可以指定重定向URL(对于特殊重定向状态码,301/302等) 或者是指定提示文本内容(对于特殊状态码403/500等),处于此指令后的所有配置都将不被执行,return可以在server、if 和 location块进行配置。

语法格式:

示例:

① 修改子配置文件

② 访问不存在页面,查看是否可以跳转

③ 当然也可以跳转至百度

http状态码301和302区别?

301:永久重定向,读取过一次就会将此条配置缓存在我们的客户端,即使nginx服务器宕机,在缓存时间内还是可以跳转

302:临时重定向,不会有缓存在客户端,每次跳转需要nginx服务器解析,一旦服务器宕机就无法跳转

302状态码宕机服务器查看详情:

Nginx重写功能和反向代理的用法详解

301状态码宕机服务器查看详情:

Nginx重写功能和反向代理的用法详解

1.3 set 指令

指定key并给其定义一个变量,变量可以调用Nginx内置变量赋值给key,另外set定义格式为set $key value,value可以是text, variables和两者的组合。  

语法格式:

示例:

① 修改配置文件

 ② 访问页面

1.4 break 指令

用于中断当前相同作用域(location)中的其他Nginx配置,与该指令处于同一作用域的Nginx配置中,位于它前面的配置生效,位于后面的 ngx_http_rewrite_module 模块中指令就不再执行,Nginx服务器在根据配置处理请求的过程中遇到该指令的时候,回到上一层作用域继续向下读取配置,该指令可以在server块和locationif块中使用。

注意:如果break指令在location块中后续指令还会继续执行只是不执行 ngx_http_rewrite_module 模块的指令,其它指令还会执行。

通过正则表达式的匹配来改变URI,可以同时存在一个或多个指令,按照顺序依次对URI进行匹配,rewrite主要是针对用户请求的URL或者是URI做具体处理。

rewrite可以配置在 server、location、if。语法格式:

rewrite将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为表达式指定的新的URI。

注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,隐含有循环机制,但不超过10次;如果超过,提示500响应码,[flag]所表示的标志位用于控制此循环机制如果替换后的URL是以http://或https://开头,则替换结果会直接以重定向返回给客户端, 即永久重定向301。

正则表达式格式:

. #匹配除换行符以外的任意字符w #匹配字母或数字或下划线或汉字s #匹配任意的空白符d #匹配数字    [0-9]   b #匹配单词的开始或结束^ #匹配字付串的开始$ #匹配字符串的结束* #匹配重复零次或更多次+ #匹配重复一次或更多次? #匹配重复零次或一次(n) #匹配重复n次{n,} #匹配重复n次或更多次{n,m} #匹配重复n到m次*? #匹配重复任意次,但尽可能少重复+? #匹配重复1次或更多次,但尽可能少重复?? #匹配重复0次或1次,但尽可能少重复{n,m}? #匹配重复n到m次,但尽可能少重复{n,}? #匹配重复n次以上,但尽可能少重复W  #匹配任意不是字母,数字,下划线,汉字的字符S #匹配任意不是空白符的字符D #匹配任意非数字的字符B #匹配不是单词开头或结束的位置[^x] #匹配除了x以外的任意字符[^kgc] #匹配除了kgc 这几个字母以外的任意字符

示例:

访问 bj 跳转到 beijing 

① 修改配置文件

② 新建对应文件夹及页面文件

 ③ 访问页面bj

整个网站重写:

① 配置文件

② 访问根查看是否跳转百度

Nginx重写功能和反向代理的用法详解

Nginx重写功能和反向代理的用法详解

实战案例:http转https

① 配置文件

② 访问页面

Nginx重写功能和反向代理的用法详解

last 与 break:

说明: 

  • redirect;302:临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URL给客户端,由客户端重新发起请求;使用相对路径,或者http://或https://开头,状态码:302
  • permanent;301:重写完成后以永久重定向方式直接返回重写后生成的新URL给客户端,由客户端重新发起请求,状态码:301
  • break:重写完成后,停止对当前URL在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环,建议在location中使用,适用于一个URL一次重写 
  • last:重写完成后,停止对当前URI在当前location中后续的其它重写操作,而后对新的URL启动新一轮重写检查,不建议在location中使用。适用于一个URL多次重写,要注意避免出现超过十次以及URL重写后返回错误的给用户301

其他示例:

案例1:更换目录访问方式,目录转化为对象存储形式

要求:

/20200106/static->/static?id=20200106

/20200123/image ->/image?id=20200123

方法:

rewrite  ^/(d+)/(.+)/   /$2?id=$1  break;

d+:一个以上数字;.+:一个以上的字符

案例2:多目录转换访问方式

要求:

www.lucky.com/images/20200106/1.jpg => www.lucky.com/index.do?name=images&dir=20200106=&fi1e=1.jpg 

规则配置:

if($host ~*  (.*).lucky.com) {rewrite  ^/(.*)/(d+)/(.*)$   /index.do?name=$1&dir=$2&file=$3 last;

}

防盗链基于客户端携带的referer实现,referer是记录打开一个页面之前记录是从哪个页面跳转过来的标记信息,如果别人只链接了自己网站图片或某个单独的资源,而不是打开了网站的整个页面,这就是盗链,referer就是之前的那个网站域名,正常的referer信息有以下几种:

  • none:#请求报文首部没有referer首部,比如用户直接在浏览器输入域名访问web网站,就没有referer信息。
  • blocked:#请求报文有referer首部,但无有效值,比如为空。
  • server_names:#referer首部中包含本主机名及即nginx 监听的server_name。
  • arbitrary_string:#自定义指定字符串,但可使用*作通配符。示例: *.kgc.org www.kgc.*
  • regular expression:#被指定的正则表达式模式匹配到的字符串,要使用~开头,例如:~.*.kgc.com

3.1 实现盗链

① 被盗端添加文件a.jpg

② 盗取端开启httpd服务,添加web前端配置

③ 访问盗取端地址,可以直接获得被盗端图片

Nginx重写功能和反向代理的用法详解

3.2 实现防盗链 

① 配置文件

② 再次访问盗取端地址

Nginx重写功能和反向代理的用法详解

③ 无法盗取图片,状态码403 

Nginx重写功能和反向代理的用法详解

Nginx 反向代理是一种网络通信方式,它允许 Nginx 服务器代表客户端向其他服务器发送请求,并将收到的响应返回给客户端。这种代理方式隐藏了真实的服务器信息,提供了负载均衡、安全性和性能优化等好处。

正向反向代理区别:

  • 正向代理:代理客户端去访问服务器
  • 反向代理:代理的是服务器

同构代理和异构代理: 

  • 同构代理:客户到至代理端和代理端至服务端使用请求协议一致
  • 异构代理:客户到至代理端和代理端至服务端使用请求协议不一致

5.1 反向代理单台web服务器,实现单台反向代理。

客户端:192.168.190.101,服务器:192.168.190.100;代理服务器:192.168.190.102

① 代理服务器配置文件

② 客户端开启httpd服务

③ 客户端访问代理服务器

在真实服务器上做防火墙规则:

丢弃:

① 服务端添加防火墙规则

② 客户端访问代理服务器

Nginx重写功能和反向代理的用法详解

拒绝:

① 服务器修改防火墙规则

 ② 客户端访问代理服务器

Nginx重写功能和反向代理的用法详解

针对某个uri 进行访问:

要求:将用户对域www.pc.com的请求转发给后端服务器处理

① 代理端配置文件

5.2 指定location实现反向代理动静分离

环境:动态服务器7-0:192.168.190.100;静态服务器7-1:192.168.190.101;代理服务器:192.168.190.102;客户端:192.168.190.103

① 两台服务器分别开启httpd服务,新建对应web文件

② 代理服务器配置文件

访问192.168.190.102/a.jpg转到访问192.168.190.101/a.jpg:

Nginx重写功能和反向代理的用法详解

缓存功能可以加速访问,如果没有缓存关闭后端服务器后,图片将无法访问,缓存功能默认关闭,需要开启。

相关选项:

操作示例:为代理服务器开启缓存功能

① 主配置文件的http模块中添加配置

② 子配置文件添加配置

③ 访问代理端

Nginx重写功能和反向代理的用法详解

④ 查看缓存内容

⑤ 关闭服务端,再次访问

Nginx重写功能和反向代理的用法详解

① 添加子配置

② 查看新增头部字段信息

本文地址:http://dfvalve.xrbh.cn/news/10275.html    迅博思语资讯 http://dfvalve.xrbh.cn/ , 查看更多
 
标签: 反向代理 重写
 
更多>同类行业资讯
0相关评论

新闻列表
企业新闻
推荐企业新闻
推荐图文
推荐行业资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  粤ICP备2023022329号