[02] Nginx_2

4 个配置实例

1. 反向代理(1)

1.1 目标效果

打开浏览器,在浏览器地址栏输入地址 www.1101.com,跳转到 Liunx 系统 tomcat 主页。

1.2 思路分析

1.3 准备工作

1. 进入 tomcat 的 bin 目录中,启动 tomcat 服务器(如果访问不了,参考 Nginx 的访问测试 —— 查看防火墙是否开放了 8080 端口)。

2. 设置域名和 ip 的对应关系

1.4 反向代理配置

也就是在 nginx.conf 中进行请求转发的配置

1.5 测试效果

2. 反向代理(2)

2.1 实现效果

使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中,给定 nginx 监听端口为 9001。

访问 http://192.168.206.128:9001/aaa/ 直接跳转到 127.0.0.1:8080
访问 http://192.168.206.128:9001/bbb/ 直接跳转到 127.0.0.1:8081

2.2 准备工作

准备两个 tomcat 服务器,一个 8080 端口,一个 8081 端口;并为两只猫各自添加一个 html 作为目标访问资源。

iptables 中放行这 3 个端口。

2.3 反向代理配置

之前的 server {...} 不用删,直接将配置追加到 nginx.conf 中。

2.4 测试效果

2.5 location 指令说明

该指令用于匹配 URL,其语法规则: location [=|~|~*|^~] /uri/ { ... }

  1. = 用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配。如果匹配成功,就停止继续向下搜索并立即处理该请求。
  2. ~ 用于表示 uri 包含正则表达式,并且区分大小写。
  3. ~* 用于表示 uri 包含正则表达式,并且不区分大小写。
  4. ^~ 用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。

注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。

3. 负载均衡

3.1 分配策略

随着互联网信息的爆炸性增长,负载均衡(load balance) 已经不再是一个很陌生的话题,顾名思义,负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验。

快速增长的访问量和数据流量催生了各式各样的负载均衡产品,很多专业的负载均衡硬件提供了很好的功能,但却价格不菲,这使得负载均衡软件大受欢迎,Nginx 就是其中的一个,在 Linux 下有 Nginx、LVS、Haproxy 等等服务可以提供负载均衡服务,而且 Nginx 提供了几种分配方式(策略):

  1. 轮询[默认]:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
  2. weight(权重):默认为 1,权重越高被分配的客户端越多指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。
    upstream server_pool{
        server 192.168.206.128:8080 weight=6;
        server 192.168.206.128:8081 weight=7;
    }
    
  3. ip_hash:每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。
    upstream server_pool{
        ip_hash;
        server 192.168.206.128:8080;
        server 192.168.206.128:8081;
    }
    
  4. fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。
    upstream server_pool{
        server 192.168.206.128:8080;
        server 192.168.206.128:8081;
        fair;
    }
    

3.2 实现效果

浏览器地址栏输入地址:http://192.168.206.128/abc/index.html,负载均衡效果:平均到 8080 和 8081 端口中。

3.3 准备工作

  1. 准备两台 tomcat 服务器,一台 8080,一台 8081。
  2. 在两台 tomcat 各自的 webapps 目录中,都创建名称为 abc 的文件夹,并在 abc 文件夹中创建页面 index.html,用于测试。

3.4 使用默认策略

3.5 测试效果

4. 动静分离

4.1 简述

Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面。

动静分离从目前实现角度来讲大致分为两种:一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;另外一种方法就是动态跟静态文件混合在一起发布,通过 Nginx 来分开。

通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源(如果经常更新的文件,不建议使用 Expires 来缓存)。我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304;如果有修改,则直接从服务器重新下载,返回状态码 200。

4.2 准备工作

在 Liunx 系统中准备静态资源,用于进行访问。

4.3 配置

4.4 测试效果

autoindex 效果:

5. 高可用集群

5.1 什么是 Nginx 高可用?

5.2 准备工作

  1. 需要两台 nginx 服务器: 192.168.17.129 和 192.168.17.131
  2. 使用命令 yum install keepalived –y 在两台服务器安装 keepalived
  3. 安装之后,再分别修改各自的 /etc/keepalived/keepalivec.conf 配置文件
    global_defs { # 全局配置
        notification_email {
            acassen@firewall.loc
            failover@firewall.loc
            sysadmin@firewall.loc
        }
        notification_email_from Alexandre.Cassen@firewall.loc
            smtp_server 192.168.17.129
            smtp_connect_timeout 30
            router_id LVS_DEVEL # 访问到主机,通过 vim /etc/host 查看主机名
    }
    
    vrrp_script chk_http_port { # 脚本配置
        script "/usr/local/src/nginx_check.sh"
        interval 2 # 检测脚本执行的间隔为 2s
        weight 2 # 当脚本条件成立,就改变当前主机的权重
    }
    
    vrrp_instance VI_1 { # 虚拟 IP 配置
        state BACKUP # 备份服务器上将 MASTER 改为 BACKUP
        interface ens33 // 网卡
        virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
        priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
        advert_int 1 # 每隔 1s 发送心跳
        authentication { # 权限校验的方式
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress { # 可以绑定多个虚拟 IP
            192.168.17.50 // VRRP H 虚拟地址
        }
    }
    
  4. 在 /usr/local/src 添加检测脚本 nginx_check.sh
    #!/bin/bash
    A=`ps -C nginx –no-header |wc -l`
    if [ $A -eq 0 ];then
        /usr/local/nginx/sbin/nginx
        sleep 2
        if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
            killall keepalived
        fi
    fi
    
  5. 把两台服务器上 [nginx] ./nginx 和 [keepalived] systemctl start keepalived.service 启动。

5.3 测试效果

1. 在浏览器地址栏输入虚拟 IP 地址:192.168.17.50

虚拟 IP 此时在主服务器上。

2. 把主服务器(192.168.17.129) 的 nginx 和 keepalived 停止,再输入 192.168.17.50,依旧可以访问(虚拟 IP 此时已绑定到了备份服务器上)。

原文地址:https://www.cnblogs.com/liujiaqi1101/p/13976003.html