nginx的反向代理和负载均衡(seventeen day)
一、nginx的反向代理
新建一台虚拟机——static-server(静态服务器/前端服务器)
wget https://nginx.org/download/nginx-1.26.1.tar.gz #安装nginx包
ls安装依赖软件
yum -y install gcc gcc-c++
yum -y install pcre-devel
yum -y install openssl-devel
yum -y install lrzszyum -y install tree
tar -zxvf nginx-1.26.1.tar.gz #解压nginx安装包
ls
cd nginx-1.26.1
ls
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-stream #源码编译
make
make install
useradd -s /bin/nologin -M nginx
不要使用systemctl启动或者脚本启动/usr/local/nginx/sbin/nginx #启动nginx
配置属性监控
vim /usr/local/nginx/conf/nginx.conf #配置文件
location /status{
stub_status on;
access_log off;
}/usr/local/nginx/sbin/nginx -s reload #重启nginx
将static-server做为前端服务器,用于接受和响应客户端,代理另外一台主机
echo "this is java static server" > /usr/local/nginx/html/index.html
/usr/local/nginx/sbin/nginx
curl localhost
this is java static server
ps -aux|grep nginxroot 1197 0.0 0.1 46128 1156 ? Ss 10:15 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 1198 0.0 0.2 46580 2140 ? S 10:15 0:00 nginx: worker process
root 1202 0.0 0.0 112824 984 pts/0 S+ 10:16 0:00 grep --color=auto nginx
curl 192.168.1.12this is java web server
使用static-server代理dunamic-server主机;当用户访问11的时候,11不响应,而是由12响应
location proxy_pass 协议 域名 端口
使用static-server反向代理dynamic-server的服务器
vim /usr/local/nginx/conf/nginx.conf #修改配置文件
location / {
# root html; #注释
# index index.html index.htm; #注释
proxy_pass http://192.168.1.12:80;
}
curl 192.168.1.12
this is java web server
curl 192.168.1.11
this is java web server
此时静态服务器static-server为代理服务器,nginx代理其他服务时,不需要对方同意;方便了模块化操作(如果代理一个服务,双方都要同意,之前的依赖太高,不便于模块化操作)
将static-server虚拟机克隆,并且命名为dynamic-server(动态服务器/后端服务器)
修改index.html文件,并且发布web服务
echo "this is java web server" > /usr/local/nginx/html/index.html
/usr/local/nginx/sbin/nginx #启动nginx
使用curl访问当前项目
curl localhost
this is java web server
由于没有部署tomcat服务,所以使用nginx代替
nginx访问IP黑名单
克隆一台主机——allow-deny
wget https://nginx.org/download/nginx-1.26.1.tar.gz
yum -y install gcc gcc-c++
yum -y install openssl-devel
tar -zxvf nginx-1.26.1.tar.gz
cd nginx-1.26.1
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-stream
make && make install
useradd -s /bin/nologin -M nginxecho "you are luckly" > /usr/local/nginx/html/index.html
设置除12(dynamic-server)主机可以访问,其他主机都不可以访问(在配置文件中的server模块中设置)【allow 允许 deny 禁止】
vim /usr/local/nginx/conf/nginx.conf
charset utf-8;
allow 192.168.1.12;
deny 192.168.1.0/24;
deny all;
/usr/local/nginx/sbin/nginx -s reload
二、nginx负载均衡
| 主机名 | IP地址 |
| static-server | 192.168.1.10 |
| dynamic-server001 | 192.168.1.12 |
| dynamic-server002 | 192.168.1.13 |
| dynamic-server003 | 192.168.1.14 |
1、轮询
依次的将任务部署给不同的主机
dynamic-server001
[root@dynamic-server001 ~]# echo "i am dynamic server 001" > /usr/local/nginx/html/index.html
[root@dynamic-server001 ~]# /usr/local/nginx/sbin/nginx
dynamic-server002
[root@dynamic-server002 ~]# echo "i am dynamic server 002" > /usr/local/nginx/html/index.html
[root@dynamic-server002 ~]# /usr/local/nginx/sbin/nginx
dynamic-server003
[root@dynamic-server003 ~]# echo "i am dynamic server 003" > /usr/local/nginx/html/index.html
[root@dynamic-server003 ~]# /usr/local/nginx/sbin/nginx
static-server
[root@static-server ~]# echo "i am static server" > /usr/local/nginx/html/index.html
[root@static-server ~]# vim /usr/local/nginx/conf/nginx.conf
35 upstream server_group_name{
36 server 192.168.1.12:80;
37 server 192.168.1.13:80;
38 server 192.168.1.14:80;
39 }
49 location / {
50 # root html; #注释掉
51 # index index.html index.htm; #注释掉
52 proxy_pass http://server_group_name;
54 }[root@static-server ~]# /usr/local/nginx/sbin/nginx -s reload
物理机浏览器输入192.168.1.11,001,002,003的页面会轮流出现
2、加权轮询
可以在server指令中指定权重,权重越高,分配的请求越多。
[root@static-server ~]# vim /usr/local/nginx/conf/nginx.conf
upstream server_group_name{
server 192.168.1.12:80 weight=4;
server 192.168.1.13:80 weight=2;
server 192.168.1.14:80 weight=1;
}[root@static-server ~]# /usr/local/nginx/sbin/nginx -s reload
数字越大,所负担的任务越重
3、ip_hash
每个请求按访问ip的hash结果分配,使得同一客户端的请求总是定向到同一服务器,除非该服务器不可用。
[root@static-server ~]# vim /usr/local/nginx/conf/nginx.conf
upstream server_group_name{
ip_hash;
server 192.168.1.12:80 weight=4;
server 192.168.1.13:80 weight=2;
server 192.168.1.14:80 weight=1;
}
[root@static-server ~]# /usr/local/nginx/sbin/nginx -s reload
例:第一次访问到001,之后一直就是,不变
4、least_conn(最少连接)
把请求转发给连接数较少的后端服务器。轮询算法是把请求平均地转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,leastconn这种方式就可以达到更好的负载均衡效果。
[root@static-server ~]# vim /usr/local/nginx/conf/nginx.conf
upstream server_group_name{
ip_hash;
#least_conn; #将请求转发给连接数较少的后端服务器
server 192.168.1.12:80 weight=4;
server 192.168.1.13:80 weight=2;
server 192.168.1.14:80 weight=1;
}
[root@static-server ~]# /usr/local/nginx/sbin/nginx -s reload
5、url_hash
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用ur_hash,可以使得同一个url (也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再次收到请求,就可以从缓存中读取。
[root@static-server ~]# vim /usr/local/nginx/conf/nginx.conf
upstream server_group_name{
ip_hash;
#hash $request_uri;
#least_conn;
server 192.168.1.12:80 weight=4;
server 192.168.1.13:80 weight=2;
server 192.168.1.14:80 weight=1;
}
[root@static-server ~]# /usr/local/nginx/sbin/nginx -s reload
三、平滑升级
例:将nginx-1.26.1升级为nginx-1.27.0
服务开启的时候升级nginx
wget https://nginx.org/download/nginx-1.27.0.tar.gz
tar -zxvf nginx-1.27.0.tar.gz
cd nginx-1.27.0
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-stream
make && make install
ls /usr/local/nginx/sbin/nginx nginx.old
/usr/local/nginx/sbin/nginx -vnginx version: nginx/1.27.0
/usr/local/nginx/sbin/nginx.old -vnginx version: nginx/1.26.1
ps -aux|grep nginxroot 1194 0.0 0.2 46172 2040 ? Ss 15:03 0:00 nginx: master process /usr/local/nginx/sbin/nginx #主进程
nginx 1215 0.0 0.2 46620 2292 ? S 15:45 0:00 nginx: worker process #子进程
root 4216 0.0 0.0 112824 988 pts/0 R+ 16:33 0:00 grep --color=auto nginx
kill -USR2 1194 #启用新版本的nginx服务
kill -WINCH 1215
kill -QUIT 1194curl -I localhost #查看当前nginx版本
HTTP/1.1 200 OK
Server: nginx/1.27.0
Date: Tue, 30 Jul 2024 08:55:00 GMT
Content-Type: text/html
Content-Length: 24
Connection: keep-alive
Last-Modified: Tue, 30 Jul 2024 07:02:19 GMT
ETag: "66a88ffb-18"
Accept-Ranges: bytes该过程nginx服务一直能访问到
配置tomcat 10 运行环境 tomcat 可以在jdk8的环境运行;tomcat 10必须在jdk17以上的版本运行
dynamic-server001
wget https://download.oracle.com/java/22/latest/jdk-22_linux-x64_bin.tar.gz
tar -zxvf jdk-22_linux-x64_bin.tar.gz
ls
anaconda-ks.cfg jdk-22_linux-x64_bin.tar.gz nginx-1.26.1.tar.gz jdk-22.0.2 nginx-1.26.1
cd jdk-22.0.2/
ls
bin conf include jmods legal lib LICENSE man README release
cd bin/
ls
jar javap jdeps jlink jrunscript jwebserver jarsigner jcmd jfr jmap jshell keytool java jconsole jhsdb jmod jstack rmiregistry javac jdb jimage jpackage jstat serialver javadoc jdeprscan jinfo jps jstatd
./java
cd
mv jdk-22.0.2/ /usr/local/jdk22
ls /usr/local/jdk22/bin conf include jmods legal lib LICENSE man README release
cd /usr/local/jdk22/
sed -n '$p' /etc/profileunset -f pathmunge
sed -i '$aexport JAVA_HOME=/usr/local/jdk22/' /etc/profile
sed -n '$p' /etc/profileexport JAVA_HOME=/usr/local/jdk22/
source /etc/profile
$JAVA_HOME
sed -i '$aPATH=$JAVA_HOME/bin:$PATH' /etc/profile
sed -n '$p' /etc/profilePATH=$JAVA_HOME/bin:$PATH
source /etc/profile
java
java -version
cd
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.26/bin/apache-tomcat-10.1.26.tar.gz
相关文章:
nginx的反向代理和负载均衡(seventeen day)
一、nginx的反向代理 新建一台虚拟机——static-server(静态服务器/前端服务器) wget https://nginx.org/download/nginx-1.26.1.tar.gz #安装nginx包 ls 安装依赖软件 yum -y install gcc gcc-c yum -y install pcre-devel yum -y install openss…...
BES编译SDK中遇到的perl问题
0 Preface/Foreword 1 问题清单 1.1 perl\r: No such file or directory 编译完成,通过perl,将elf文件转为bin文件,出现错误。 通过查看,项目源文件中,只有一个pl文件: 查看Linux distro使用的WSL版本&am…...
【康复学习--LeetCode每日一题】3111. 覆盖所有点的最少矩形数目
题目: 给你一个二维整数数组 point ,其中 points[i] [xi, yi] 表示二维平面内的一个点。同时给你一个整数 w 。你需要用矩形 覆盖所有 点。 每个矩形的左下角在某个点 (x1, 0) 处,且右上角在某个点 (x2, y2) 处,其中 x1 < x…...
Django实战:开启数字化任务管理的新纪元
🚀 Django实战:开启数字化任务管理的新纪元 🌐 📖 引言 在数字化转型的浪潮中,任务管理的智能化成为提升组织效能的关键。今天,我将带领大家深入了解我们最新开发的OFTS系统——一款创新的组织任务管理软…...
史上最全网络安全面试题+答案
1、什么是SQL注入攻击 前端代码未被解析被代入到数据库导致数据库报错 2、什么是XSS攻击 跨站脚本攻击 在网页中嵌入客户端恶意脚本,常用s语言,也会用其他脚本语言 属于客户端攻击,受害者是用户,网站管理员也属于用户…...
Python 爬虫入门(五):使用 lxml 解析网页
Python 爬虫入门(五):使用 lxml 解析网页 前言1. lxml 简介1.1 什么是 lxml?1.2 为什么选择 lxml?1.3 安装 lxml 2. lxml 基础2.1 解析 HTML/XML2.2 XPath 表达式2.3 使用 XPath 提取数据 3. 深入解析3.1 处理命名空间…...
阿里云RDS到亚马逊云RDS的实时数据同步方案详解
1. 需求背景 在当今的多云环境中,企业经常需要在不同云平台之间同步数据。本文将详细介绍如何实现从阿里云RDS MySQL数据库到亚马逊云RDS MySQL数据库的实时数据同步。这种同步对于数据备份、跨区域数据访问、数据分析等场景都非常有用。 2. 方案概述 我们将使用AWS Kinesis…...
《LeetCode热题100》---<滑动窗口篇两道>
本篇博客讲解LeetCode热题100道滑动窗口篇中的两道题 第一道:无重复字符的最长子串 第二道:找到字符当中的所有字母异位词 第一道:无重复字符的最长子串 哈希滑动窗口 class Solution {public int lengthOfLongestSubstring(String s0) {int…...
Python学习计划——9.1多线程编程
并发编程是一种在同一时间段内运行多个任务的方法,可以提高程序的效率和性能。Python中的多线程编程可以使用threading模块实现。以下是多线程编程的详细讲解和可运行的Python案例。 1. 什么是多线程 多线程是一种并发编程的方式,它允许在同一个进程中…...
借助 NGINX 对本地的 Kubernetes 服务进行自动化的 TCP 负载均衡
原文作者:Chris Akker - F5 技术解决方案架构师,Steve Wagner - F5 NGINX 解决方案架构师 原文链接:借助 NGINX 对本地的 Kubernetes 服务进行自动化的 TCP 负载均衡 转载来源:NGINX 中文官网 NGINX 唯一中文官方社区 ,…...
基于python的大学学生影响力分析系统设计与实现
博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…...
upload-labs靶场(1-19关)
upload-labs靶场 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试过程中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共19关,每一关都包含着不同上传方式。 注意:能运行<?php phpinfo();?&…...
Python面向对象浅析
目录 面向对象基本概念 一、类和对象 类和对象是面向对象骗程的两个核心概念。 在程序开发中,要设计一个类,通常需要满足一下三个要素: self详解: 对象(Object) 魔法方法: 类里的一些特殊方法 __in…...
JS基本语法
JS代码写在body结束标签的上面 如点击按钮调用方法: 在浏览器的控制台打印测试数据 console.log() <body><button type"button" onclick"easymethod()">点击我</button><script>//JS代码,写在body标签的…...
LSTM详解总结
LSTM(Long Short-Term Memory)是一种用于处理和预测时间序列数据的递归神经网络(RNN)的改进版本。其设计初衷是为了解决普通RNN在长序列训练中出现的梯度消失和梯度爆炸问题。以下是对LSTM的详细解释,包括原理、公式、…...
制品库nexus
详见:Sonatype Nexus Repository搭建与使用(详细教程3.70.1)-CSDN博客 注意事项: 1.java8环境使用nexus-3.69.0-02-java8-unix.tar.gz包 2.java11环境使用nexus-3.70.1-02-java11-unix.tar.gz包 3.注意使用制品库/etc/yum.repos.…...
2022.11.17 阿里钉钉数据开发岗位一面
今天晚上和阿里钉钉面试官聊了一面,整个过程持续45分钟,还是相当持久的。前面先让我自我介绍,包括自身背景、工作经历和项目经验,在介绍的时候面试官几次打断,让我停下来,然后他提问,我很纳闷还…...
【无标题】Git(仓库,分支,分支冲突)
Git 一种分布式版本控制系统,用于跟踪和管理代码的变更 一.Git的主要功能: 二.准备git机器 修改静态ip,主机名 三.git仓库的建立: 1.安装git [rootgit ~]# yum -y install git 2.创建一个…...
访问控制列表(ACL)
文章目录 ACL原理与基本配置ACL分类ACL组成ACL规则的匹配与应用 ACL原理与基本配置 ACL(Access Control List,访问控制列表) 读取二层、三层、四层报文信息根据预先定义好的规则对报文进行过滤和分类实现网络访问控制、防止网络攻击和提高网络带宽利用率等目的提高…...
自用git命令(待完善)
----------------------------------------------------------------------------------------- ###基础 git config --global user.name "xxxxx" #设置提交人 name git config --global user.email "xxxxxx163.com" #设置提交人 email git …...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 允许出现允许…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
加密通信 + 行为分析:运营商行业安全防御体系重构
在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...
Linux安全加固:从攻防视角构建系统免疫
Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...
