nginx

nginx简介

在这里插入图片描述
Tomact:web应用服务器
Nginx:web服务器,性能高,并不是代替Tomact。其主要作用是:反向代理、负载均衡、动静分离。

安装

1、上传安装包到opt目录下
在这里插入图片描述

2、解压安装包

	tar -zxvf zlib-1.2.8.tar.gz
	tar -zxvf pcre-8.37.tar.gz
	tar -zxvf openssl-1.0.1t.tar.gz
	tar -zxvf nginx-1.17.1.tar.gz

3、安装zlib

	cd zlib-1.2.8/
	./configure 
	make && make install

4、安装pcre 正则解析模块

​	cd /opt/pcre-8.37/
​	./configure
​	make && make install

5、安装openssl 加密传输数据模块

​	cd /opt/openssl
​	./config
​	make && make install

6、安装nginx

​	cd /opt/nginx
​	./configure
​	make && make install

7、启动nginx

​ nginx安装后启动命令在:

/usr/local/nginx/sbin/nginx   

查看是否启动成功:

```
ps -aux|grep nginx
```

在这里插入图片描述

8、在浏览器中访问nginx:

​ nginx启动时默认监听的端口号为80

在这里插入图片描述
注意关闭虚拟机防火墙。

systemctl stop firewalld.service

nginx的使用

nginx的命令:

​ 启动: /usr/local/nginx/sbin/nginx

​ 停止:/usr/local/nginx/sbin/nginx -s stop

​ 重新加载nginx配置文件: /usr/local/nginx/sbin/nginx -s reload

​ 修改nginx命令可以在任意位置直接执行:
方式1:在/etc/profile中的path变量后面拼接nginx的sbin目录到path中
方式2:可以将nginx的命令拷贝到现有的PATH变量的路径下
拷贝/usr/local/nginx/sbin/nginx到/usr/local/bin下

cp /usr/local/nginx/sbin/nginx  /usr/local/bin/

启动

nginx

关闭

nginx -s stop

创建测试项目:

1、选择创建springboot项目:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、创建完毕后的目录结构
在这里插入图片描述

3、在主程序的目录下创建子目录controller并创建HelloController


@Controller
public class HelloController {
    // 如果配置文件中配置了端口号,可以通过@Value注解读取属性值
    @Value("${server.port}")
    Integer port;
    // 处理/hello请求返回当前项目的端口号
    @ResponseBody
    @RequestMapping("/hello")
    public String hello(){
        return "hello,访问项目的端口号为:"+port;
    }
}

4、在项目的resources目录下的application.properties文件中设置端口号参数
在这里插入图片描述

5、启动项目并访问
在这里插入图片描述

1. 反向代理

​ 使用nginx服务器代理运行的tomcat服务器
​ 用户访问nginx时,请求会被交给tomcat服务器处理
​ tomcat服务器:http://192.168.200.1:8081/hello
​ nginx服务器:http://192.168.200.130:80
修改nginx的配置:添加反向代理
​ vim /usr/local/nginx/conf/nginx.conf

#  如果访问的路径没有更合适的location块匹配,就会由当前配置匹配
# 如果浏览器访问 http://192.168.200.130:80/dsa,nginx当前location块会匹配处理
# nginx会将端口号后面的所有的字符串和 proxy_pass的值进行拼接 再访问
location / {
# 反向代理
proxy_pass http://192.168.200.1:8081;
proxy_connect_timeout 30;
}

重新加载nginx配置文件:

​	nginx  -s  reload

在浏览器中访问nginx+要访问项目的资源地址测试
在这里插入图片描述
请求是交给nginx的,但是最终是主机处理请求的。

location语法:

​ 1、= :精确匹配

location = /a/b {
# 反向代理
proxy_pass http://192.168.1.1:8081;
proxy_connect_timeout 30;
}

​ 当浏览器访问地址完全=location的表达式时,才会被匹配

http://192.168.1.168/a/b 匹配

http://192.168.1.168/a/b/c 不匹配

​ 2、没有修饰符,必须以指定的模式开始才会被匹配

location  /a/b {
# 反向代理
proxy_pass http://192.168.1.1:8081;
proxy_connect_timeout 30;
}

http://192.168.1.168/a/b> 匹配

http://192.168.1.168/a/bcd 匹配

http://192.168.1.168/a/B <http://192.168.1.168/a 不匹配

​ 3、~ 必须和正则表达式匹配并区分大小写

location ~ ^/a/b$ {
# 反向代理
proxy_pass http://192.168.1.1:8081;
proxy_connect_timeout 30;
}

http://192.168.1.168/a/bc http://192.168.1.168/a/b/c 不匹配

http://192.168.1.168/a/b <http://192.168.1.168/a/b?id=1 匹配

​ 4、~* 表达式有正则,不区分大小写匹配

location ~* ^/a/b$ {
# 反向代理
proxy_pass http://192.168.1.1:8081;
proxy_connect_timeout 30;
}

http://192.168.1.168/a/b> <http://192.168.1.168/a/b?id=1 匹配

http://192.168.1.168/A/B> <http://192.168.1.168/A/b?id=1 匹配

​ 5、^~ 反正则,指定前面正则匹配到的某些特例路径不要被正则匹配到

2. 负载均衡

nginx配置负载均衡

    # 声明负载均衡模块
    upstream  myservers{
      server  192.168.1.1:8081;
      server  192.168.1.1:8082;
      server  192.168.1.1:8083;
    }
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
        #  如果访问的路径没有更合适的location块匹配,就会由当前配置匹配
        # 如果浏览器访问 http://192.168.1.168:80/dsa,nginx当前location块会匹配处理
        # nginx会将端口号后面的所有的字符串和 proxy_pass的值进行拼接 再访问
        location / {
          # 反向代理
          # 使用负载均衡模块
          proxy_pass http://myservers;
          proxy_connect_timeout 30;
        }

配置springboot项目多实例启动

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试负载均衡

​ 重启nginx

​ 在浏览器中访问nginx时请求会以轮询的方式交给负载均衡模块的三个tomcat服务器处理
在这里插入图片描述

负载均衡的策略

默认:轮询

​ 每个服务器处理一次

    # 声明负载均衡模块
    upstream  myservers{
      server  192.168.1.1:8081;
      server  192.168.1.1:8082;
      server  192.168.1.1:8083;
    }

加权轮询

​ 按照权重比例分配处理请求的次数

    # 声明负载均衡模块
    upstream  myservers{
      server  192.168.1.1:8081 weight=1;
      server  192.168.1.1:8082 weight=2;
      server  192.168.1.1:8083 weight=2;
    }

备机模式backup

​ 如果主机还在备机不会处理请求,如果主机宕机备机会自动上位

    # 声明负载均衡模块
    upstream  myservers{
      server  192.168.1.1:8081 weight=1;
      server  192.168.1.1:8082 weight=2;
      server  192.168.1.1:8083 backup;
    }

hash模式

​ ip_hash:

​ 根据请求用户的ip地址进行hash计算决定哪个服务器处理本次请求

​ url_hash

​ 根据用户访问的url地址进行hash计算决定访问那个服务器

fair模式

​ nginx将请求交给目标服务器处理之前会ping所有的服务器,哪个响应快哪个处理本次请求

3. 动静分离

​ nginx处理请求的速度快,如果请求访问的是静态资源ngixn可以直接处理提高响应速度

​ nginx没有办法执行java程序。所以访问动态资源[jsp、需要权限验证的资源、controller…]必须交由tomcat处理

在虚拟机的nginx中准备静态资源:

​ 打开finalshell,在虚拟机的/usr/local/nginx家目录下创建 static目录

​ 再到static下创建 resources 目录用来存放所有的静态资源

​ 在resources下创建imgs、css、js目录并在目录下准备对应的资源

​ 静态资源都存在 nginx家目录/static/resources目录下

配置nginx实现静态资源的代理:

# 静态资源的匹配配置
# 当浏览器访问http://192.168.1.168:80/resources/xxxxx/xx时 nginx当前location会匹配到
# 然后使用基准地址  nginx家目录/static和 端口号后的字符串拼接查找该资源
# /usr/local/nginx/static/resources/xxxxx/xx
location /resources{
   root   static;
}

nginx-master-worker机制

​ nginx处理用户请求时采用了master-worker机制

​ master负责接收请求管理所有的worker

​ 当有请求访问nginx时,nginxmaster接收到请求就通知所有的worker

​ worker们来争抢请求,抢到后处理该请求

​ worker出现异常退出也不会影响master,master会重新在启动一个worker来替代出异常停止的worker

配置文件

# 指定nginx启动时worker的数量
# worker类似redis,一个worker对应一个进程,进程中值运行了一个主线程用来通过异步非阻塞的方式处理请求,可以将一个CPU的性能发挥到极致,设置worker时最好数量和cpu的核心数一样
worker_processes  12;

events {
# 每个worker的最大连接数  ,连接指的是读写操作的连接,读对应一个连接,写对应一个连接
# 访问nginx代理的静态资源时,worker需要两个连接,   访问nginx代理的动态资源时,worker需要四个连接
# 最大连接数的值不是越大越好,硬盘的IO速度是有限,系统对硬盘的连接数也有限制,默认一个线程最多可以对硬盘建立1024个连接
    worker_connections  1024;
}
# 计算nginx当前的最大的并发数量
# worker_processes*worker_connections/4  ~  worker_processes*worker_connections/2

nginx-keepalived高可用

1、克隆虚拟机准备一个master和backup

1.1 先克隆一个master:要修改ip地址

vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADD="192.168.200.140"

service network restart

1.2 在master中安装nginx:

​ 先上传课件中的nginx的压缩文件到虚拟机的/opt目录下
再解压缩nginx所有的安装包
tar -zxvf zlib-1.2.8.tar.gz 举个例子
​ 逐个安装

cd zlib-1.2.8/
./configure
make && make install

​ 如果报错:表示c语言和c++的环境没有安装,需要安装
在这里插入图片描述
可以在线安装:
​ yum install -y gcc
​ yum install -y gcc-c++
​ 然后再参考nginx的安装步骤逐个安装
要想输入nginx直接启动,则应 cp /usr/local/nginx/sbin/nginx /usr/local/bin/
查看nginx是否启动: ps -aux|grep nginx
停止nginx:nginx -s stop

1.3 安装keepalived:参考课件,基本如下

1.3.0
 tar -zxvf keepalived-1.4.2.tar.gz -C /usr/local/src/
 yum install -y openssl openssl-devel
 cd /usr/local/src/keepalived-1.4.2/
./configure --prefix=/usr/local/keepalived
make && make install
1.3.1初始化配置及启动测试
1 配置:
cp /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/
cp /usr/local/keepalived/sbin/keepalived /usr/local/bin/
cp /usr/local/src/keepalived-1.4.2/keepalived/etc/init.d/keepalived  /etc/init.d/
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
2 启动、关闭、重启、查看状态
service keepalived start|stop|restart|status

1.3.2、准备备机

1 克隆 192.168.1.129 创建 backup备机

​ 先停止129 master

2 重置网卡mac地址

在这里插入图片描述

3 关闭主机(避免ip冲突)并修改备机ip为: 192.168.200.141

在这里插入图片描述

1.3.3、主备模式:

1 主备配置文件修改
1、主服务器 vim /etc/keepalived/keepalived.conf

删除配置文件14行的严格模式:vrrp_strict:
20行的网卡绑定修改为ens33:interface ens33
21行定义了一组keepalived,22行决定了一组中master的优先级:master优先级一定要最大
28行VIP的配置,VIP地址一定要和网卡的网段一样:地址不可以和其他的虚拟机ip冲突

virtual_ipaddress {
        192.168.200.111
     }
! Configuration File for keepalived
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.140 
   smtp_connect_timeout 30
   router_id nginx_master 
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
#检测脚本定义
vrrp_script chk_http_port {
    script "/etc/keepalived/nginx_check.sh"  
    interval 2   # 脚本执行的间隔
    weight   2   # 权重等级
}
vrrp_instance VI_1 {
    state MASTER # 主机master,备机backup 
    interface ens33
    virtual_router_id 51 # master 和backup在同一个虚拟路由里,id 号必须相同
    priority 100  # 主备级别,主机要比备机的值大
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.111 # keepalived提供的虚拟地址供外界访问[必须和主备机网段相同,ip值不同]
    }
}
2、从服务器 /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.141
   smtp_connect_timeout 30
   router_id nginx_backup 
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
#检测脚本定义
vrrp_script chk_http_port {
    script "/etc/keepalived/nginx_check.sh"  
    interval 2   # 脚本执行的间隔
    weight   2   # 权重等级
}
vrrp_instance VI_1 {
    state BACKUP # 主机master,备机backup 
    interface ens33 #网卡名不能写错
    virtual_router_id 51 # master 和backup在同一个虚拟路由里,id 号必须相同
    priority 90  # 主备级别,主机要比备机的值大
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.111 # keepalived提供的虚拟地址供外界访问[必须和主备机网段相同,ip值不同]
    }
}
3、主备服务器创建相同的检查脚本文件

vim /etc/keepalived/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

给nginx_check脚本设置可执行的权限: chmod 777 /etc/keepalived/nginx_check.sh

4、配置完信息后在主备机中分别启动nginx 和 keepalived
/usr/local/nginx/sbin/nginx
service keepalived start

查看keepalived是否启动成功

service keepalived status

测试
修改主备nginx的index.html页面显示内容区分主备

vim /usr/local/nginx/html/index.html

在这里插入图片描述

在这里插入图片描述

​ 访问keepalived地址:http://192.168.1.111:80

2、主备测试

当主服务器keepalived和nginx还正常运行时,主服务器的 ens33 网卡地址是VIP地址,从服务器不是
在这里插入图片描述
浏览器访问192.168.200.111,访问的是MASTER Nginx在这里插入图片描述

当把主服务器的 nginx 和 keepalived 停止服务2秒钟后
在这里插入图片描述
从服务器ens33网卡地址是VIP地址
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q8vIzhKg-1631415868140)(assets/1590632297987.png)]
关闭master的keepalived+nginx之后,浏览器访问192.168.200.111,
在这里插入图片描述

同样,当主服务器再次打开时,再次访问同样的地址,主机ens网卡绑定VIP地址。

1.3.4、双主模式(了解)

1 主机配置文件

​ 在keepalived.conf最后一行添加

vrrp_instance VI_2 {
    state BACKUP
    interface ens33
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.112
    }
}
2 备机配置文件
vrrp_instance VI_2 {
    state MASTER
    interface ens33
    virtual_router_id 52
    priority 190
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.112
    }
}
3 重启主备的keepalived

执行:ip addr
主备各有一个VIP

4 关闭主机keepalived+nginx测试高可用
5 测试双主模式

​ 启动主备的keepalived和nginx
​ 浏览器访问:
​ http://192.168.200.111

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值