nginx的https与动态负载均衡

news2024/12/24 9:12:17

nginx的https

证书可以根据你的域名和服务器服务商去进行签发 , 比如 : 阿里云 腾讯云 百度云 华为云等
这里使用的是腾讯云 :
下载证书 :

选择 nginx:
下载之后传递到服务器上。

下面开始配置nginxhttps:

1. 解压下载的证书包

cd /etc/ssl
unzip xxcc.dwa_nginx.zip
mv xxcc.dwa_nginx/* ./
2. nginx 配置 https
server
{
listen 443 ssl;
server_name yuxiaodong.club;
root /www/wwwroot/blog-web;
index index.php index.html;
ssl_certificate /etc/ssl/yuxiaodong.club_bundle.crt;
ssl_certificate_key /etc/ssl/yuxiaodong.club.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 10s;
}
location ~ [^/]\.php(/|$)
{
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;
include fastcgi.conf;
include pathinfo.conf;
}
error_log /www/server/nginx/logs/yuxiaodong_error.log;
3. 域名重定向到 https
server
{
listen 80;
server_name yuxiaodong.club;
rewrite ^/(.*)$ https://yuxiaodong.club:443/$1 permanent;
error_log /www/server/nginx/logs/yuxiaodong_error.log;
}

nginx动态负载均衡

Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件。
服务发现以及注册:当服务 Producer 启动时,会将自己的 Ip/host 等信息通过发送请求告 Consul Consul接收到 Producer 的注册信息后,每隔一段时间会向 Producer 发送一个健康检查的请求,检验Producer 是否健康。
服务调用:当 Consumer 请求 Product 时,会先从 Consul 中拿到存储 Product 服务的 IP Port 的临时表(temp table),从 temp table 表中任选一个 · Producer IP Port , 然后根据这个 IP和 Port ,发送访问请求;temp table 表只包含通过了健康检查的 Producer 信息,并且每隔一段时间更新。
consul 的安装
Consul 安装包下载地址: https://www.consul.io/downloads
(1) 下载完后,解压,得到一个可执行文件 consul
解压: unzip consul_1.9.4_linux_amd64.zip
(2) 将这个文件移动到全局变量环境中
Mv consul /usr/local/bin/
(3) 验证安装
Consul version
consul 常用命令

agent命令

描述:运行一个consul agent
使用案例:consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node=ali -
bind=192.168.63.101 -ui -client=0.0.0.0
参数含义:
agent
-server表示启动的是一个服务
-bootstrap-expect 1 表示等待多少个节点再启动,这里1个,就是自己一个就启动了
-node=texun_1 就是给consul服务起个别名为ali_1
-bind=172.17.114.76 绑定内网ip
-data-dir /opt/data1 数据存储目录为/opt/data1
-ui 启动默认ui界面
-client consul绑定在哪个client地址上,这个地址提供HTTP、DNS、RPC等服务,默认是
127.0.0.1,可指定允许客户端使用什么ip去访问

 members命令

描述:将 agent 加入到 consul 集群
使用案例: consul members
join 命令
描述:列出 consul cluster 集群中的 members
使用案例: consul join 192.168.63.101
leave 命令
描述:将节点移除所在的集群
使用案例: consul leave 192.168.63.101
nginx 配置
nginx配置如下:
upstream blogs {
server www.starsky-nginx.com:8080;
upsync 192.168.63.102:8500/v1/kv/upstreams/nginx_test upsync_timeout=6m
upsync_interval=500ms upsync_type=consul strong_dependency=off;
upsync_dump_path /vhost/server_test.conf;
include /vhost/server_test.conf;
}
server
{
listen 80;
server_name www.blog-nginxs.com;
index index.html index.php;
location ~ \.php$ {
proxy_pass http://blogs;
}
}
解释:
192.168.63.102:8500/v1/kv/upstreams =》 连接consul的api资源地址
nginx_test =》 相当于我们自己在consul中自定义的key
upsync_timeout =》 超时时间6分钟
upsync_interval =》 定时获取信息的时间
upsync_type =》 类型
strong_dependency=on; =》 是否依赖consul运行
upsync_dump_path =》 拉取之后申请配置文件
启动consul:consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node=ali
-bind=192.168.63.101 -ui -client=0.0.0.0
新增负载均衡nginx配置文件:
1. cd /vhost/
2. touch server_nginx.conf
向consul新增nginx服务器:
curl -X PUT -d '{"weight":1,"max_fails":2,"fail_timeout":10}'
http://192.168.63.101:8500/v1/kv/upstreams/nginx_test/192.168.63.102:80
curl -X PUT -d '{"weight":1,"max_fails":2,"fail_timeout":10}'
http://192.168.63.101:8500/v1/kv/upstreams/nginx_test/192.168.63.103:80
curl -X PUT -d '{"weight":1,"max_fails":2,"fail_timeout":10}'
http://101.35.53.212:8500/v1/kv/upstreams/nginx_test/101.35.53.212:80
 高可用

keepalived概述  

Keepalived Linux 下一个轻量级的高可用解决方案,它与 HeartBeat RoseHA 实现的功能类似,都可以实现服务或者网络的高可用,但是又有差别,HeartBeat 是一个专业的、功能
完善的高可用软件,它提供了 HA软件所需的基本功能,比如心跳检测和资源接管,监测集群中的系统服 务,在集群节点间转移共享 IP 地址的所有者等, HeartBeat 功能强大,但是部署和使用相对比较麻烦;与 HeartBeat 相比, Keepalived 主要是通过虚拟路由冗余来实现高可用功能,虽然它没有 HearBeat 功能强大,但 Keepalived 部署和使用非常简单,所有配置只需一个配置文件即可完成。
 
什么是 keepalived
Keepalived 起初是为 LVS 设计的,专门用来监控集群系统中各个服务节点的状态。它根据 TCP/IP 参考模型的第三、第四和第五层交换机制检测每个服务节点的状态,如果某个服务节点出现异常,或工作出现故障,Keepalived将检测到,并将出现故障的服务节点从集群系统中剔除,而在故障节点恢复正常后, Keepalived又可以自动将此服务节点重新加入服务器集群中,这些工作全部自动完成,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点
keepalived 的安装
1. 安装Keepalived需要的扩展
[root@localhost keepalived]# yum install gcc gcc-c++ openssl openssl-devel
[root@localhost home]# wget -q https://www.keepalived.org/software/keepalived-
1.2.18.tar.gz
2. 解压Keepalived并安装
[root@localhost home]# tar -zxvf keepalived-1.2.18.tar.gz
[root@localhost home]# cd keepalived-1.2.18
[root@localhost keepalived-1.2.18]# ./configure --prefix=/usr/local/keepalived
[root@localhost keepalived-1.2.18]# make && make install
3. 将 keepalived 安装成 Linux 系统服务
因为没有使用 keepalived 的默认路径安装(默认是/usr/local) ,安装完成之后,需要做一些工
作 复制默认配置文件到默认路径
[root@localhost keepalived-1.2.18]# mkdir /etc/keepalived
[root@localhost keepalived-1.2.18]# cp
/usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
4. 复制 keepalived 服务脚本到默认的地址
[root@localhost keepalived-1.2.18]# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived
/etc/init.d/
[root@localhost keepalived-1.2.18]# cp /usr/local/keepalived/etc/sysconfig/keepalived
/etc/sysconfig/
[root@localhost keepalived-1.2.18]# ln -s /usr/local/keepalived/sbin/keepalived
/usr/sbin/
5. 设置 keepalived 服务开机启动
[root@localhost keepalived-1.2.18]# chkconfig keepalived on

 keepalived的主从配置

 1.主的配置

! Configuration File for keepalived
global_defs {
router_id LVS_MASTER
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx.sh" ##检测nginx状态的脚本
interval 2 ##检测的时间间隔
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 79
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.63.104
}
track_script {
chk_nginx
}
}

 从的配置

! Configuration File for keepalived
global_defs {
router_id LVS_MASTER
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx.sh" ##检测nginx状态的脚本
interval 2 ##检测的时间间隔
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 79
priority 90
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.63.104
}
track_script {
chk_nginx
}

完成以上配置后,主备服务器能够实现ip漂移,但是我们需要的功能实际是keepalived检测nginx负载均衡服务,一旦nginx负载均衡服务宕机,keepalived需要尝试去启动nginx,否则停止keepalived,让ip漂移到备用机上。下面是检测的脚本:

#! /bin/bash
START_NGINX="service nginx start"
LOG_FILE="/usr/local/nginx/logs/nginx_upstreams.log"
HAPS=`ps -C nginx --no-header |wc -l`
date "+%Y-%m-%d %H:%M:%S" >> $LOG_FILE
echo "check nginx status" >> $LOG_FILE
if [ $HAPS -eq 0 ];then
echo $START_HAPROXY >> $LOG_FILE
service nginx start
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
echo "start nginx failed, killall keepalived" >> $LOG_FILE
killall keepalived
service keepalived stop
fi
fi

 而在keepalived的配置中我们可以看到配置了

vrrp_script chk_nginx {
script "/etc/keepalived/nginx.sh" ##检测nginx状态的脚本
interval 2 ##检测的时间间隔
weight 2
}
track_script {
chk_nginx
}
keepalived 的配置就是在引入与执行 nginx 的脚本对 nginx 进行检测。

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

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

相关文章

JMeter基础用法和测试WebSocket请求

目录 JMeter websocket插件安装测试接口的编写添加测试线程组创建取样器创建WebSocket连接创建循环控制器创建WebSocket request-response Sampler创建固定定时器 正则匹配上一个请求的数据做为当前请求参数正则编写使用匹配值 CSV文件读取参数添加汇总报告和结果树 JMeter web…

zookeeper如何管理客户端与服务端之间的链接?(zookeeper sessions)

zookeeper客户端与服务端之间的链接用zookeeper session表示。 zookeeper session有三个状态: CONNECTING, ASSOCIATING, CONNECTED, CONNECTEDREADONLY, CLOSED, AUTH_FAILED, NOT_CONNECTED(start时的状态) 1、CONNECTING 。 表明客户…

vulhub中Apache Solr 远程命令执行漏洞复现(CVE-2017-12629)

Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。原理大致是文档通过Http利用XML加到一个搜索集合中。查询该集合也是通过 http收到一个XML/JSON响应来实现。此次7.1.0之前版本总共爆出两个漏洞:[XM…

金三银四面试题(九):JVM常见面试题(3)

今天我们继续探讨常见的JVM面试题。这些问题不比之前的问题庞大,多用于面试中JVM部分的热身运动,开胃菜,但是大家已经要认真准备。 你能保证GC 执行吗? 不能,虽然你可以调用System.gc() 或者Runtime.gc()&#xff0c…

vue3+threejs新手从零开发卡牌游戏(二十四):添加p2战斗逻辑

用代码模拟p2战斗逻辑,按流程进行步骤拆分: 1.p2抽卡 2.p2召唤怪兽上场 3.p2战斗 其中战斗部分分为几种情况: 情况一:p2场上卡牌由大到小进行排序,按序轮询可以攻击的卡牌,然后攻击p1场上卡牌由大到小…

代码随想录阅读笔记-二叉树【完全二叉树节点个数】

题目 给出一个完全二叉树,求出该树的节点个数。 示例 1: 输入:root [1,2,3,4,5,6]输出:6 示例 2: 输入:root []输出:0 示例 3: 输入:root [1]输出:1 提示&…

玩转Django分页器

一、Pagination 分页器编程步骤 View, 导入django.core.paginator.Paginator类,创建Paginator 对象时,输入qs对象,以及每页显示条数。 接收 URL, 从请求参数中读取page数值 ,通过 paginator.page(page_num) 返回请求页的page_obj…

pyinstaller打包多线程pyqt5程序后,报错,反复弹窗等问题

报错1: Traceback (most recent call last): File “MPL.py”, line 502, in File “Lib\site-packages\PyInstaller\hooks\rthooks\pyi_rth_multiprocessing.py”, line 45, in _freeze_support ValueError: not enough values to unpack (expected 2, got 1) 报…

绘制空心环形

1.通过几个div拼接绘制空心环形进度条。 通过 -webkit-mask: radial-gradient(transparent 150px, #fff 150px);绘制空心圆 html:<body><div class"circle"><div class"circle-left"></div><div class"circle-left-mask&…

从0开始搭建基于VUE的前端项目(二) 安装和配置element-ui组件库

版本和地址 ElementUI 2.15.14 (https://element.eleme.io/)按需引入的插件 babel-plugin-component(1.1.1) https://github.com/ElementUI/babel-plugin-component 安装 npm install element-ui完整引入(不建议) 这种方式最后打包的源文件很大&#xff0c;造成网络资源的浪…

LeetCode-56. 合并区间【数组 排序】

LeetCode-56. 合并区间【数组 排序】 题目描述&#xff1a;解题思路一&#xff1a;排序&#xff1f;怎么排&#xff1f;当然是排各个区间的左边界&#xff0c;然后判断下一个边界的左边界与结果数组里面的右边界是否重叠。解题思路二&#xff1a;优化解题思路三&#xff1a;0 题…

Vitepress部署到GitHub Pages,工作流

效果&#xff1a; 第一步&#xff1a; 部署 VitePress 站点 | VitePress 执行 npm run docs:build&#xff0c;npm run docs:preview&#xff0c;生成dist文件 第二步&#xff1a; 手动创建.gitignore文件&#xff1a; node_modules .DS_Store dist-ssr cache .cache .temp *…

[html]基础知识点汇总

前言 经过一阵子学习后&#xff0c;把知识点全部提炼了出来&#xff0c;自我感觉比较全和简洁&#xff0c;希望能够帮到大家。 本机实验环境 火狐浏览器&#xff0c;vscode&#xff0c;windows11&#xff0c;程序运行插件&#xff1a;live server html介绍 html--前端语言…

深入PostgreSQL中的pg_global表空间

pg_global表空间的位置 在PG当中&#xff0c;一个实例(cluster)初始化完以后&#xff0c;你会看到有下边两个与表空间相关的目录生成&#xff1a; $PGDATA/base $PGDATA/global 我们再用元命令\db以及相关视图看看相应的表空间信息&#xff1a; postgres# \db …

synchronized 关键字 - 监视器锁 monitor lock

目录 一、1 synchronized 的特性 1、互斥 2、可重入 二、synchronized 使用示例 1、修饰代码块: 明确指定锁哪个对象. 2、直接修饰普通⽅法: 锁的 SynchronizedDemo 对象 3、修饰静态方法: 锁的 SynchronizedDemo 类的对象 我们重点要理解&#xff0c;synchronized 锁…

Java设计模式 | 原型模式

是什么 用一个已经创建的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型对象相同的新对象。该模式的核⼼思想是基于现有的对象创建新的对象&#xff0c;⽽不是从头开始创建。 结构 抽象原型接口&#xff1a;声明一个克隆自身的方法clone()具体原型类&#xf…

飞书API(2):通过 Python 读取多维表数据

上一篇介绍了怎么通过官方的控制台调用飞书的 API 读取多维表数据&#xff0c;本篇介绍怎么通过 Python 读取多维表数据。 通过 Python 读取多维表主要分两步&#xff1a; 第一步是获取 access_token&#xff1b;第二步是拿 access_token 读取数据。 先说第二步&#xff0c;因…

SQLAlchemy 建立数据库模型之间的关系

常见关系&#xff1a; 一对多关系多对一关系多对多关系一对一关系 一对多关系&#xff08;一个作者&#xff0c;多篇文章&#xff09; ## 一对多关系&#xff0c;单作者-多文章&#xff0c;外键不可少 ## 外键(ForeignKey)总在多的那边定义,关系(relationship)总在单的那边定…

【计算机网络】四层负载均衡和七层负载均衡

前言 1、分层方式 首先我们知道&#xff0c;在计算机网络中&#xff0c;常用的协议分层方式&#xff1a;OSI和TCP/IP&#xff0c;以及实际生产中使用的协议划分方式。 在OSI中&#xff0c;各层的职责如下&#xff1a; 应用层&#xff1a;对软件提供接口以使程序能使用网络服…

CVAE——生成0-9数字图像(Pytorch+mnist)

1、简介 CVAE&#xff08;Conditional Variational Autoencoder&#xff0c;条件变分自编码器&#xff09;是一种变分自编码器&#xff08;VAE&#xff09;的变体&#xff0c;用于生成有条件的数据。在传统的变分自编码器中&#xff0c;生成的数据是完全由潜在变量决定的&…