Nginx重写功能和反向代理

目录

一、重写功能rewrite

1.1 if指令

1.2 return

1.3 set指令

1.4 break 指令

二、反向代理

2.1动静分离

2.2 缓存功能

2.3 ip穿透

2.4 http反向代理负载均衡


一、重写功能rewrite

Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求,此功能依靠 PCRE(perl compatible regular expression),因此编译之前要安装PCRE库,rewrite是nginx服务器的重要功能之一,用于实现URL的重写,URL的重写是非常有用的功能,比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也无需其他网站修改我们的链接,就可以设置为自动访问,另外还可以在一定程度上提高网站的安全性。

1.1 if指令

官方文档

Module ngx_http_rewrite_module

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

if (条件匹配) {   
 action
}

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

= #比较变量和字符串是否相等,相等时if指令认为该条件为true,反之为false
!=  #比较变量和字符串是否不相等,不相等时if指令认为条件为true,反之为false
~ #区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
!~ #区分大小写字符,判断是否匹配,不满足匹配条件为真,满足匹配条件为假

~* #不区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
!~* #不区分大小字符,判断是否匹配,满足匹配条件为假,不满足匹配条件为真


-f 和 !-f #判断请求的文件是否存在和是否不存在
-d 和 !-d #判断请求的目录是否存在和是否不存在
-x 和 !-x #判断文件是否可执行和是否不可执行
-e 和 !-e #判断请求的文件或目录是否存在和是否不存在(包括文件,目录,软链接)

Nginx重写功能和反向代理_第1张图片

用另一台机器测试

1.2 return

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

Nginx重写功能和反向代理_第2张图片

Nginx重写功能和反向代理_第3张图片

1.3 set指令

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

Nginx重写功能和反向代理_第4张图片

1.4 break 指令

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

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

Nginx重写功能和反向代理_第5张图片

Nginx重写功能和反向代理_第6张图片

二、反向代理

反向代理:reverse proxy,指的是代理外网用户的请求到内部的指定的服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式。

Nginx 除了可以在企业提供高性能的web服务之外,另外还可以将 nginx 本身不具备的请求通过某种预定义的协议转发至其它服务器处理,不同的协议就是Nginx服务器与其他服务器进行通信的一种规范,主要在不同的场景使用以下模块实现不同的功能

官方文档: Module ngx_http_proxy_module

2.1动静分离

代理机器配置 (192.168.30.200)

Nginx重写功能和反向代理_第7张图片

动态服务器配置(192.168.30.100)

Nginx重写功能和反向代理_第8张图片

cd /apps/nginx/html

Nginx重写功能和反向代理_第9张图片

Nginx重写功能和反向代理_第10张图片

Nginx重写功能和反向代理_第11张图片

静态服务器配置(192.168.30.203)

cd /apps/nginx/html

Nginx重写功能和反向代理_第12张图片

Nginx重写功能和反向代理_第13张图片

Nginx重写功能和反向代理_第14张图片

用第四台机器测试

Nginx重写功能和反向代理_第15张图片

2.2 缓存功能

Nginx重写功能和反向代理_第16张图片


proxy_cache proxycache;
proxy_cache_key $request_uri; #对指定的数据进行MD5的运算做为缓存的key
proxy_cache_valid 200 302 301 10m; #指定的状态码返回的数据缓存多长时间
proxy_cache_valid any 1m;   #除指定的状态码返回的数据以外的缓存多长时间,必须设置,否则不会缓存

Nginx重写功能和反向代理_第17张图片

Nginx重写功能和反向代理_第18张图片

2.3 ip穿透

vim /apps/nginx/conf/nginx.conf  将日制格式前注释取消掉

Nginx重写功能和反向代理_第19张图片

Nginx重写功能和反向代理_第20张图片

Nginx重写功能和反向代理_第21张图片

用客户端访问

Nginx重写功能和反向代理_第22张图片

Nginx重写功能和反向代理_第23张图片

Nginx重写功能和反向代理_第24张图片

2.4 http反向代理负载均衡

在上一个节中Nginx可以将客户端的请求转发至单台后端服务器但是无法转发至特定的一组的服务器,而且不能对后端服务器提供相应的服务器状态监测,Nginx 可以基于ngx_http_upstream_module模块提供服务器分组转发、权重分配、状态监测、调度算法等高级功能

官方文档: https://nginx.org/en/docs/http/ngx_http_up

Nginx重写功能和反向代理_第25张图片

Nginx重写功能和反向代理_第26张图片

配置192.168.30.203服务器页面

Nginx重写功能和反向代理_第27张图片

配置192.168.30.100的服务器页面

Nginx重写功能和反向代理_第28张图片

用第四台192.168.30.104进行检测

Nginx重写功能和反向代理_第29张图片

你可能感兴趣的:(nginx,运维)