• 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 #判断请求的文件或目录是否存在和是否不存在(包括文件,目录,软链接)

    用另一台机器测试

    1.2 return

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

    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 模块的指令,其它指令还会执行

    二、反向代理

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

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

    官方文档: Module ngx_http_proxy_module

    2.1动静分离

    代理机器配置 (192.168.30.200)

    动态服务器配置(192.168.30.100)

    cd /apps/nginx/html

    静态服务器配置(192.168.30.203)

    cd /apps/nginx/html

    用第四台机器测试

    2.2 缓存功能


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

    2.3 ip穿透

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

    用客户端访问

    2.4 http反向代理负载均衡

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

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

    配置192.168.30.203服务器页面

    配置192.168.30.100的服务器页面

    用第四台192.168.30.104进行检测

  • 相关阅读:
    蓝链带货怎么玩?B站横屏、竖屏恰饭竟增长1200w播放!
    【Redis在Windows中与Linux中的下载安装,启动服务和设置密码远程连接】
    【顺序表ArrayList】
    设计模式:建造者模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)
    unicodedata.normalize ——Unicode字符串标准化
    java基于springboot+vue+elementui的漫画投稿交流平台 前后端分离
    Python数据透视表
    tiup mirror genkey
    STL中string类的实现
    MySQL如何获取binlog的开始时间和结束时间
  • 原文地址:https://blog.csdn.net/Besteady/article/details/132651709