当前位置: 首页 > news >正文

安全基础第十一天:nginx

目 录

一、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,刷新页面就会跳转到我们的备服务器。

相关文章:

安全基础第十一天:nginx

目 录 一、nginx的反向代理 1.反向代理原理 2.反向代理的几种算法 (1)轮询(默认) (2)weight (3)ip_hash (4)fair(第三方) …...

设计模式之【命令模式】,方法调用的花式玩法

文章目录 一、什么是命令模式1、命令模式使用场景2、命令模式的主要角色3、命令模式优缺点4、命令模式注意事项及细节 二、使用示例1、命令模式的一般写法2、播放器功能案例3、遥控器案例 三、源码中的命令模式1、Thread 一、什么是命令模式 命令模式(Command Patt…...

企业需要专业电子邮件地址的4大原因

专业的企业电子邮件地址具有贵公司的自定义域名,而不是通用的Zoho Mail 、gmail或yahoo帐户,例如:john stargardening.com 大多数初学者使用不带域名的通用免费企业电子邮件帐户,这不是很专业。例如:zhangsan2022zoho.…...

国民游戏王者荣耀的真实地图开发之路

👉腾小云导读 相信很多人都玩过王者荣耀,大家在欣赏其华丽的游戏界面以及炫酷的游戏技能时,是否好奇过王者荣耀的地图是怎样开发出来的?在开发的历程中,都有哪些问题?是怎样解决的?本文将从其地…...

浅谈IDC数据中心综合布线第二篇——结构化布线

数据中心网络在当今的业务中扮演着越来越重要的作用,提供数据的存储、管理、共享、交换、应用等功能。在数据中心中,大量的数据在服务器、交换机、存储设备之间通过物理层的光缆(仅讨论光纤布线)进行传输。数据表明,在…...

电脑格式化后数据恢复软件EasyRecovery16

EasyRecovery是一款由Kroll Ontrack公司开发的专业数据恢复软件,旨在帮助用户从各种数据丢失情况下恢复文件。无论是因为误删除、格式化、分区丢失、系统崩溃还是其他原因导致的数据丢失,EasyRecovery都具有强大的恢复功能。 EasyRecovery提供了多种恢复…...

(2020)End-to-end Neural Coreference Resolution论文笔记

2020End-to-end Neural Coreference Resolution论文笔记 Abstract1 Introduction2 Related Work3 Task4 Model4.1 Scoring Architecture4.2 Span Representations5 Inference6 Learning7 Experiments7.1 HyperparametersWord representationsHidden dimensionsFeature encoding…...

kafka命令

查询kafka版本信息 kafka-configs.sh --describe --bootstrap-server localhost:9092 --version 查看所有topic [rootm10 bin]# kafka-topics.sh --list --zookeeper localhost:2181 __consumer_offsets kahn-topic-1 my_topic x_topic-1 创建一个topic,名为x_top…...

mybatis多表查询

多表查询有哪些情况 Mybatis 支持多表查询,常见的多表查询方式包括使用嵌套查询和关联查询 嵌套查询 嵌套查询是指在 SQL 语句中嵌套另外一个查询语句,可以用于在一个表中查询与另一表相关的数据。例如,在一个订单表中同时需要查询该订单所属…...

kafka 从入门到精通

kafka 安装 zookeeper模式 创建软件目录 mkdir /opt/soft cd /opt/soft下载 wget https://downloads.apache.org/kafka/3.4.0/kafka_2.13-3.4.0.tgz解压 tar -zxvf kafka_2.13-3.4.0.tgz 修改目录名称 mv kafka_2.13-3.4.0 kafka配置环境变量 vim /etc/profileexport K…...

写PPT没有思路, 这些底层方法论让你灵感爆棚……

作为一个10年经验的策划人,以下是个人多年经验,看完绝对对你写PPT会有很大帮助! 首先,有很多新手写PPT有一个不好的习惯,就是喜欢直接上手就打开PPT开始啪啪啪打字。 这是非常错误的,这就等于你是想到哪写…...

【小沐学Python】Python实现Web服务器(Flask+Vue+node.js,web单页增删改查)

文章目录 1、简介1.1 flask1.2 vue 2、开发2.1 新建flask项目2.2 安装flask库2.3 新建flask的主脚本2.4 新建Vue项目2.5 安装vue项目依赖项2.6 新增组件Ping.vue2.7 Ping.vue增加HTTP请求2.8 美化vue前端页面2.9 新增组件Books.vue2.10 flask增加路由Books2.11 Books.vue增加HT…...

甘肃非煤矿山电子封条 智慧矿山 opencv

甘肃非煤矿山电子封条 智慧煤矿接入国家矿山安全平台是通过pythonopencv网络模型,甘肃非煤矿山电子封条pythonopencv网络模型对关键位置(回风井口、运人井口、车辆出入口)对现场人员行为、数量、穿戴着装及设备状态各数据进行实时监控分析。p…...

工业识别与定位系统源码解决方案

工厂人员定位系统源码,工业领域定位系统源码 近年来人员定位系统在工业领域的发展势头迅猛,工业识别与定位成为促进制造业数字化的关键技术。通过实时定位可以判断所有的人、物、车的位置。实时定位系统要适用于复杂工业环境,单一技术是很难…...

PCL学习之滤波算法

前言 点云滤波作为常见的点云处理算法,一般是点云处理的第一步,对后续处理有很重要作用。滤波 有很多方面也有很多种功能,比如去除噪声点、离群点、点云平滑以及空洞、数据压缩等 原始点云数据往往包含大量散列点、孤立点,在获取…...

第二章 链表

目录 一、移除链表元素二、设计链表三、反转链表四、两两交换链表中的节点五、删除链表倒数第N个节点六、链表相交七、环形链表Ⅱ 一、移除链表元素 Leetcode 203 class Solution { public:ListNode* removeElements(ListNode* head, int val) {ListNode* dummyHead new Lis…...

Spring Security OAuth2实现单点登录:简化多个系统之间的登录流程

Spring Security OAuth2实现单点登录:简化多个系统之间的登录流程 一、介绍OAuth21. OAuth2的定义和作用2. OAuth2的优点和使用场景 二、Spring Security1. Spring Security的介绍2. Spring Security的特点和优势 三、OAuth2与Spring Security的结合1. OAuth2在Spri…...

语义分析器

语义分析器(Semantic Analyzer)是编译器中的一个重要组成部分,它负责对源代码进行语义分析,检查源代码是否符合语义规范,并进行错误处理和类型推导等操作。 举个例子,假设有以下的源代码: int…...

爬虫基本原理

爬虫基本原理 1.1获取网页1.1.1提取信息1.1.2保存数据 1.2请求1.2.1 请求方法1.2.2 请求网址1.2.3 请求头1.2.4请求体1.3响应 1.1获取网页 爬虫首先要做的工作就是获取网页,这里就是获取网页的源代码。源代码里包含了网页的部分有用信息,所以只要把源代…...

常见电子元器件和电路

目录 常见电子元器件一览表(字母标志)NTC(负温度系数热敏电阻)压敏电阻X2电容(抑制电源电磁干扰用电容器)泄放电阻共模电压共模电感整流桥滤波电容RCD吸收二极管Y电容整流器的原理输出整流肖特基二极管 功率晶体管(GTR,三极管)双极型晶体管(BJT&#xff…...

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

Cursor实现用excel数据填充word模版的方法

cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

【kafka】Golang实现分布式Masscan任务调度系统

要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...