安全基础第十一天:nginx

news2024/11/28 17:58:21

目 录

一、nginx的反向代理

1.反向代理原理

2.反向代理的几种算法

(1)轮询(默认) 

(2)weight 

(3)ip_hash 

(4)fair(第三方) 

(5)url_hash(第三方)

(6)least_conn  

3.配置

(1)给centos和ubuntu下载配置安装nginx

(2)在centos下进入到/usr/local/nginx/conf/

(3)编辑nginx.conf文本,编辑内容如下

(4)进入到Ubuntu的/usr/local/nginx/html

(5)编辑index.html,内容如下

(6)进入到windows,编辑index.html如下

(7)启动centos和ubuntu的nginx

(8)在windows上启用小皮面板

(9)查看启动状态

(10)在物理机进行访问centos:192.168.191.129

二、nginx的高可用

1.原理

2.实验搭建

(1)下载keepalive压缩包(keepalive下载网址)

 (2)解压缩包

 (3)将解压的文件移动到我们/usr/local下

 (4)构建编译环境并且安装

(5)进入到/usr/local/etc/keepalived/下

(6)编辑一个 keepalived.conf文本,编辑以下内容

(7)创建nginx重启脚本check_nginx_pid.sh编辑以下内容

(8)给check_nginx_pid.sh增加一个可执行的权限:

(9)由于安装keepalived时,是自定义的安装位置,因此需要拷贝一些文件到系统目录中

(10)启动keepalive服务

(11)检查是否keepalive是都启动成功

(12)另外一台主机作为备,操作和上述一样,唯一一点在配置keepalived.conf不同,备份配置如下:

(13)启动主备服务器的nginx和keepalive

(14)测试


一、nginx的反向代理

1.反向代理原理

        就是把大量的请求按照我们指定的方式均衡的分配给集群中的每台服务器,从而不会产生集群中大量请求只请求某一台服务器,从而使该服务器宕机的情况。

2.反向代理的几种算法

(1)轮询(默认) 

  每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动删除。 

(2)weight 

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 

(3)ip_hash 

 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session 保持的问题。  

(4)fair(第三方) 

可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配,Nginx本身默认是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。

(5)url_hash(第三方)

 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率,Nginx本身默认是不支持url_hash的,如果需要这种高度算法,必须安装Nginx的hash软件包。

(6)least_conn 
 

 根据后端服务器的连接状况进行分配客户请求,连接最少的服务器将被有限分配客户端请求。

3.配置

centos作为反向代理服务器(192.168.191.129)

ubuntu(192.168.191.128)和windows10(192.168.191.134)作为被代理的服务器)

(1)给centos和ubuntu下载配置安装nginx

(2)在centos下进入到/usr/local/nginx/conf/

cd /usr/local/nginx/conf

(3)编辑nginx.conf文本,编辑内容如下

    upstream nginx_html{
   # 30s内检查心跳发送两次包,未回复就代表该机器宕机,请求分发权重比为1:2
    server 192.168.191.128 weight=100 max_fails=2 fail_timeout=30s;
    server 192.168.191.134 weight=200 max_fails=2 fail_timeout=30s;
    # 这里的IP请配置成你WEB服务所在的机器IP
     }

(4)进入到Ubuntu的/usr/local/nginx/html

cd /usr/local/nginx/html

(5)编辑index.html,内容如下

ubuntu 192.168.191.128

(6)进入到windows,编辑index.html如下

Windows 192.168.191.134

(7)启动centos和ubuntu的nginx

cd /usr/local/nginx/sbin

./nginx 

(8)在windows上启用小皮面板

(9)查看启动状态

ps -ef | grep nginx

(10)在物理机进行访问centos:192.168.191.129

 

二、nginx的高可用

1.原理

        两台设备分为主备,并且主备都需要安装nginx和keepalive(原理是心跳检测),在主备上面分别连接两台服务器,当主设备挂掉后,备用设备可以正常的去使用。

2.实验搭建

(1)下载keepalive压缩包(keepalive下载网址)

wget https://keepalived.org/software/keepalived-2.2.7.tar.gz

 (2)解压缩包

 tar -zvxf keepalived-2.2.7.tar.gz

 

 (3)将解压的文件移动到我们/usr/local下

mv keepalive /usr/local/

 (4)构建编译环境并且安装

./configure

make && make install

 

(5)进入到/usr/local/etc/keepalived/下

cd  /usr/local/etc/keepalived/

(6)编辑一个 keepalived.conf文本,编辑以下内容

global_defs {
    # 自带的邮件提醒服务,建议用独立的监控或第三方SMTP,也可选择配置邮件发送。
    notification_email {
        root@localhost
    }
    notification_email_from root@localhost
    smtp_server localhost
    smtp_connect_timeout 30
    # 高可用集群主机身份标识(集群中主机身份标识名称不能重复,建议配置成本机IP)
    router_id 192.168.191.129

}

# 定时运行的脚本文件配置
vrrp_script check_nginx_pid_restart {
    # 之前编写的nginx重启脚本的所在位置
    script "check_nginx_pid.sh" 

    # 每间隔3秒执行一次
    interval 3
    # 如果脚本中的条件成立,重启一次则权重-20
    weight -20
}

# 定义虚拟路由,VI_1为虚拟路由的标示符(可自定义名称)
vrrp_instance VI_1 {
    # 当前节点的身份标识:用来决定主从(MASTER为主机,BACKUP为从机)
    state MASTER

    # 绑定虚拟IP的网络接口,根据自己的机器的网卡配置
    interface ens33 
    # 虚拟路由的ID号,主从两个节点设置必须一样
    virtual_router_id 240

    # 填写本机IP
    mcast_src_ip 192.168.191.129

    # 节点权重优先级,主节点要比从节点优先级高
    priority 100
    # 优先级高的设置nopreempt,解决异常恢复后再次抢占造成的脑裂问题
    nopreempt
    # 组播信息发送间隔,两个节点设置必须一样,默认1s(类似于心跳检测)
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass jiege
    }
    # 将track_script块加入instance配置块
    track_script {
        # 执行Nginx监控的脚本
        check_nginx_pid_restart
    }

    virtual_ipaddress {
        # 虚拟IP(VIP),也可扩展,可配置多个。
        192.168.191.240

    }
}

(7)创建nginx重启脚本check_nginx_pid.sh编辑以下内容

#!/bin/sh
# 通过ps指令查询后台的nginx进程数,并将其保存在变量nginx_number中
nginx_number=`ps -C nginx --no-header | wc -l`
# 判断后台是否还有Nginx进程在运行
if [ $nginx_number -eq 0 ];then
    # 如果后台查询不到`Nginx`进程存在,则执行重启指令
    /soft/nginx/sbin/nginx -c /soft/nginx/conf/nginx.conf
    # 重启后等待1s后,再次查询后台进程数
    sleep 1
    # 如果重启后依旧无法查询到nginx进程
    if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
        # 将keepalived主机下线,将虚拟IP漂移给从机,从机上线接管Nginx服务
        systemctl stop keepalived.service
    fi
fi

 

(8)给check_nginx_pid.sh增加一个可执行的权限:

chmod +x check_nginx_pid.sh

(9)由于安装keepalived时,是自定义的安装位置,因此需要拷贝一些文件到系统目录中

mkdir /etc/keepalived/

cp keepalived.conf /etc/keepalived/

cp init.d/keepalived /etc/init.d/

cp sysconfig/keepalived /etc/sysconfig/

 

(10)启动keepalive服务

systemctl restart keepalive.server 

(11)检查是否keepalive是都启动成功

ipaddr

(12)另外一台主机作为备,操作和上述一样,唯一一点在配置keepalived.conf不同,备份配置如下:

global_defs {
    # 自带的邮件提醒服务,建议用独立的监控或第三方SMTP,也可选择配置邮件发送。
    notification_email {
        root@localhost
    }
    notification_email_from root@localhost
    smtp_server localhost
    smtp_connect_timeout 30
    # 高可用集群主机身份标识(集群中主机身份标识名称不能重复,建议配置成本机IP)
    router_id 192.168.191.128 

}

# 定时运行的脚本文件配置
vrrp_script check_nginx_pid_restart {
    # 之前编写的nginx重启脚本的所在位置
    script "/soft/scripts/keepalived/check_nginx_pid_restart.sh" 
    # 每间隔3秒执行一次
    interval 3
    # 如果脚本中的条件成立,重启一次则权重-20
    weight -20
}

# 定义虚拟路由,VI_1为虚拟路由的标示符(可自定义名称)
vrrp_instance VI_1 {
    # 当前节点的身份标识:用来决定主从(MASTER为主机,BACKUP为从机)
    state BACKUP

    # 绑定虚拟IP的网络接口,根据自己的机器的网卡配置
    interface ens33 

    # 虚拟路由的ID号,主从两个节点设置必须一样
    virtual_router_id 240

    # 填写本机IP
    mcast_src_ip 192.168.191.128
    # 节点权重优先级,主节点要比从节点优先级高
    priority 90
    # 优先级高的设置nopreempt,解决异常恢复后再次抢占造成的脑裂问题
    nopreempt

    # 组播信息发送间隔,两个节点设置必须一样,默认1s(类似于心跳检测)
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass jiege
    }
    # 将track_script块加入instance配置块
    track_script {
        # 执行Nginx监控的脚本
        check_nginx_pid_restart
    }

    virtual_ipaddress {
        # 虚拟IP(VIP),也可扩展,可配置多个。
        192.168.191.240

    }
}

(13)启动主备服务器的nginx和keepalive

(14)测试

        我们在物理机浏览器输入虚拟ip,我们访问的主服务器,我们多刷新几次,依旧是,当我们关闭主nginx,刷新页面就会跳转到我们的备服务器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/524266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot+vue家乡特色推荐系统(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的家乡特色推荐系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风…

客户端跨端动态化方案现状

前言 客户端现状 工作中,经常遇到产品想尽快上线看数,CR业务也总是倒排期状态,native 的发版窗口是他们经常要关注的,往往因为窗口时间问题,导致某个需求业务迭代周期长,客户端开发在业务动态化方面多有被…

毫米波雷达系列 | 传统CFAR检测(有序统计类)

毫米波雷达系列 | 传统CFAR检测(有序统计类) 1.OS-CFAR 有序统计类CFAR检测器(OS-CFAR)与均值类CFAR检测器处理过程不同,在对背景杂波功率进行估计时,需要将所有参考单元进行升序排列得到一个新的有序数列,在新序列中选取第k个值…

【Python | 深度学习】safetensors 包的介绍和使用案例(含源代码)

safetensors 是一种用于安全存储张量(与 pickle 相反)的新型简单格式,并且仍然很快(零拷贝)。 safetensors 真的很快。 一、安装 1.1 pip 安装 pip install safetensors1.2 conda 安装 conda install -c huggingf…

【HTML5系列】第二章 · HTML5新增功能

写在前面 Hello大家好, 我是【麟-小白】,一位软件工程专业的学生,喜好计算机知识。希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正&#xff0…

我写了一套uniapp微信小程序投票系统实战课程 (SpringBoot2+vue3.2+element plus ) 实战课程,免费分享给CSDN的朋友们

大家好,我是锋哥,最近写了一套前后端分离的uniapp微信小程序投票系统,逼格略高,专门为Java初学者提升技术层次和方便就业而精心打造。希望你们喜欢!(文末领取) 一,Java就业实战课程简…

STC单片机使用示例分别介绍 CCP/PCA在4种工作模式下的使用

STC单片机使用示例分别介绍 CCP/PCA在4种工作模式下的使用 📍针对利用PCA对上升或下降沿捕获功能,可以看这篇有关脉宽测量《STC15单片机利用PCA功能测量脉宽应用示例》 🍁应用场景: 🎉STC15系列部分单片机集成了3路可编程计数器阵列(CCP/PCA)模块(STC15W4K32S4系列单…

DOM事件模型与事件委托

事件 JS与HTML之间的交互通过事件实现。 事件就是文档或浏览器窗口中发生的一些特定的交互瞬间。 可以使用监听器来预定事件,以便事件发生时执行相应的代码。这种在传统软件工程中被称为观察者模式 事件流 事件流描述的是从页面中接受事件的顺序 事件冒泡 微软…

【李老师云计算】实验三:在Docker中部署Hadoop集群

索引 0. 前言1. Docker1.1 安装Docker1.2 启动Docker 2. Dokcer部署Hadoop2.1 设计Hadoop集群结构2.2 拉取Hadoop镜像2.3 ★解决拉取镜像时 - no space left on device2.4 创建Docker容器2.5 ★解决docker ps没有内容2.6 通过终端进入容器2.7 关闭防火墙2.8 配置SSH2.8.1 设置主…

springboot+vue留守儿童爱心网站(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的留守儿童爱心网站。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风…

这个代码生成器火了…SmartSoftHelp

火了,火了…SmartSoftHelp 开源C#代码生成器,专注.NET,Sqlserver,最简单,最干净,支持自编码的开源工具,SmartSoftHelp 开发辅助优化工具! 下载地址:https://pan.baidu.…

PC端网页特效

元素偏移量offset系列:(使用其相关属性可以动态的得到该元素的位置(偏移)、大小 (1)获得元素距离带有定位父元素的位置 …

sqlserver 中的表值函数和标量函数

目录 一、表值函数 1.内联表值函数 1.创建函数 2.调用函数 3.返回结果 2.多语句的表值函数 2.调用函数 3.返回结果 3.内联表值函数和多语句的表值函数的区别 1.语法上 2.结构上 二、标量函数 1.创建函数 2.调用函数 2.返回结果 总结 一、表值函数 表值函数是返回一个Table类型…

2023年必备!这些值得信赖的问卷调查工具

随着我们进入2023年,可靠的调查问卷工具对研究和数据收集的重要性比以往任何时候都更加明显。随着在线调查和远程数据收集的兴起,越来越多的用户和企业都开始注重数据安全,所以使用值得信赖和有效的工具至关重要。在这篇文章中,小…

Spring的第十六阶段:数据库的事务隔离级别

数据库事务隔离级别 1、为什么会出现数据库的隔离级别呢? 数据库隔离级别是为了解决数据库并发访问过程中产生的各种数据安全问题. 四种事务隔离级别: 一:读未提交 read uncommitted 二:读已提交 read committed ( oracle默认 ) 三&…

教大家如何使用VS Code远程开发ubuntu和服务器项目

目录 前提条件 一、ubuntu中安装openssh服务器 二、配置本地VSCode 三、本地查看、编辑ubuntu中的代码 前提条件 1.本地已经安装了Visual Studio Code IDE软件, 2.ubuntu虚拟机安装完成 一、ubuntu中安装openssh服务器 1.1使用如下命名进行安装: …

测试老鸟总结,性能测试常见测试缺陷,卷出高级突破测试圈...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 性能测试&#xf…

【机器学习】LightGBM 解读 (集成学习_Boosting_GBM)

【机器学习】LightGBM 解读 (集成学习_Boosting_GBM) 文章目录 【机器学习】LightGBM 解读 (集成学习_Boosting_GBM)1. 介绍2. 数据预处理2.1 基于梯度的单边采样(GOSS)2.2 互斥特征捆绑(EFB&am…

免费安装注册 IDM 使用流程,简单方便易操作 IDM 在B站没有显示下载按钮

文章目录 下载 IDM运行脚本winr快捷键调出运行窗口输入powershell并运行上述脚本开始注册注册成功IDM 在B站没有显示下载按钮 下载 IDM 官网链接:Internet Download Manager: The fastest download accelerator 运行脚本 # Enable TLSv1.2 for compatibility wi…

多目标优化算法求解无人机三维路径规划

一、无人机模型 无人机三维路径规划是无人机在执行任务过程中的非常关键的环节,无人机三维路径规划的主要目的是在满足任务需求和自主飞行约束的基础上,计算出发点和目标点之间的最佳航路。 1.1路径成本 无人机三维路径规划的首要目标是寻找起飞点和目…