【云原生】使用nginx反向代理后台多服务器
背景
随着业务发展, 用户访问量激增,单台服务器已经无法满足现有的访问压力,研究后需要将后台服务从原来的单台升级为多台服务器,那么原来的访问方式无法满足,所以引入nginx来代理多台服务器,统一请求入口。
什么是nginx
Nginx[engine x]是一个免费开源Web服务器,是一个HTTP和反向代理服务器,邮件代理服务器, 和一个通用的 TCP/UDP 代理服务器,最初由俄罗斯软件工程师Igor Sysoev撰写。nginx专注于高性能、高并发性和低内存使用率。能够在高并发下给网站提供稳定的服务。
相关概念
- 正向代理
请求概述:客户端C知道资源D在服务器A中,但是无法直接访问服务器A,此时知道服务器N与服务器A在同一局域网中,并且可以相互访问,因为客户端C可以访问服务器N,因此客户端C通过服务器N访问服务器A得到资源D

理解:
- 正向代理对于客户端C来说他明确知道他要访问的资源D在哪个服务器上;
- 对于服务器N来说他只充当客户端C的中间代理角色;而对于服务器A来说他只知道访问他的资源的是服务器N,根本不知道客户端C的存在。
- 反向代理
请求概述:客户端C并不知道服务器A和服务器B的存在,客户端C只知道访问服务器N能获得资源D,只不过提供客户端C资源的都来着服务器A或者服务器B

理解:
- 反向代理对于客户端C来说,他是不知道资源D具体在哪里,也不知道具体由谁提供。
- 对于服务器N来说每次都接受用户的请求,然后再把请求根据调度策略交给提供资源D的服务器A或者B,对于服务器A和B来说同样也都不知道访问这份资源D的真实用户是谁,只是和服务器N进行交互。
实操nginx代理springboot服务器
注:下文所有服务基于docker环境启动
-
安装nginx容器
可参考:Docker安装镜像操作相关命令下滑到第6步
安装完成后可得到nginx映射在宿主机上相关的文件

并且启动nginx容器,映射端口:9001

-
打包springboot项目并docker运行
可参考:【云原生】springboot项目打包部署docker镜像为了模拟多台服务器,本文通过修改项目端口号(8088、8089),上传打包了两个springboot项目镜像,分别启动了一个容器

-
nginx代理配置修改
进入宿主机中的nginx文件,进入conf文件

打开后编辑default.conf(注:对于nginx代理配置,主要修改这个文件)文件

1.模拟正向代理或者说是一对一代理配置内容:
server {listen 80;listen [::]:80;server_name localhost;#access_log /var/log/nginx/host.access.log main;#nginx自带主页面配置location / {root /usr/share/nginx/html;index index.html index.htm;}# 本次配置服务器新增内容location /boot {proxy_pass http://172.16.0.3:8089/web; # 单个服务器配置proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
注:配置文件新增内容中 “/boot” 表示为映射到服务器的名称前缀,当代理的服务器增多,根据实际情况自定义不同的名称,便于区分。
- 模拟反向代理或者说代理多个服务器配置:
# 新增内容 多个服务器配置
upstream backend {ip_hash; #负载均衡策略server 172.16.0.3:8089; # 第一个 Tomcat 服务器的本地端口server 172.16.0.3:8088; # 第二个 Tomcat 服务器的本地端口
}server {listen 80;listen [::]:80;server_name localhost;#access_log /var/log/nginx/host.access.log main;#nginx自带主页面location / {root /usr/share/nginx/html;index index.html index.htm;}#服务器配置location /boot {# proxy_pass http://172.16.0.3:8089/web; # 单个服务器配置proxy_pass http://backend/web; # 多个服务器配置proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}
注:上述配置中 “ip_hash” 为nginx的一种负载均衡策略。nginx支持四种负载均衡策略。
- 轮询(Round Robin)策略
upstream backend {server 172.16.0.3:8089; # 第一个 Tomcat 服务器的本地端口server 172.16.0.3:8088; # 第二个 Tomcat 服务器的本地端口}
- 最少连接(Least Connections)策略:
upstream backend {least_conn;server 172.16.0.3:8089; # 第一个 Tomcat 服务器的本地端口server 172.16.0.3:8088; # 第二个 Tomcat 服务器的本地端口 }
- IP哈希(IP Hash)策略:
upstream backend {ip_hash;server 172.16.0.3:8089; # 第一个 Tomcat 服务器的本地端口server 172.16.0.3:8088; # 第二个 Tomcat 服务器的本地端口}
- 加权轮询(Weighted Round Robin)策略:
upstream backend {server 172.16.0.3:8089 weight=2; # 第一个 Tomcat 服务器的本地端口server 172.16.0.3:8088 weight=1; # 第二个 Tomcat 服务器的本地端口 }详细解析可参考:Nginx负载均衡多种策略配置
- 访问服务器
完成上述nginx配置后,重启nginx容器。
先不使用代理访问后台客户端:http://ip地址:8088/web/login

使用nginx代理访问客户端:http://ip地址:9001/boot/login

上述地址中的端口和路由地址都发生了改变,但代理访问客户端与不适用代理返回的页面一致,则nginx代理配置成功
使用nginx代理可以很好的隐藏内部服务器的地址,不暴露在公网中,可配置为内网地址,减少网络请求压力,安全性提高,只需开放代理服务器地址供外部访问即可。
相关文章:
【云原生】使用nginx反向代理后台多服务器
背景 随着业务发展, 用户访问量激增,单台服务器已经无法满足现有的访问压力,研究后需要将后台服务从原来的单台升级为多台服务器,那么原来的访问方式无法满足,所以引入nginx来代理多台服务器,统一请求入口…...
Linux awk命令
除了使用 sed 命令,Linux 系统中还有一个功能更加强大的文本数据处理工具,就是 awk。 曾有人推测 awk 命令的名字来源于 awkward 这个单词。其实不然,此命令的设计者有 3 位,他们的姓分别是 Aho、Weingberger 和 Kernighan&#x…...
南大通用数据库-Gbase-8a-学习-42-定位与释放锁
目录 一、测试版本 二、模拟锁表场景 1、查看自动提交参数 2、关闭自动提交 3、测试表结构 4、测试数据 5、会话一更新数据不提交 6、会话二更新数据卡住 7、会话三查看连接信息 8、会话三查看锁信息 9、解决方法 10、会话一插入数据不提交 11、会话二更新报错 三…...
css绘制常见的一些图形
以下是在CSS中绘制常见图形的示例代码: 线条: .line {width: 100px;height: 1px;background-color: black; }箭头: .arrow {width: 0;height: 0;border-top: 10px solid transparent;border-bottom: 10px solid transparent;border-right:…...
【网络协议】
网络协议 1 网络通讯1.1 防火墙1.2 子网掩码1.3 网关1.4 2 SSH2.1 SSH2.2 SSH12.3 SSH2 3 Telnet4 Telnet/SSL5 NFS6 TFTP7 FTP8 SFTP9 HTTP10 HTTPS11 NAT12 加密 1 网络通讯 1.1 防火墙 所谓“防火墙”,是指一种将内部网和公众访问网(如Internet)分开的方法&…...
如何在JVS低代码表单配置中实现数据的高效管理?
在数字化时代,表单已经成为企业、机构和个人收集、整理、分析数据的重要工具。然而,随着数据复杂性的增长,传统的单一表单往往难以满足需求。JVS低代码表单引擎中子表格允许在主表单中嵌套另一个子表数据,使得数据的收集和组织更加…...
【Python大数据笔记_day04_Hadoop】
分布式和集群 分布式:多台服务器协同配合完成同一个大任务(每个服务器都只完成大任务拆分出来的单独1个子任务) 集群:多台服务器联合起来独立做相同的任务(多个服务器分担客户发来的请求) 注意:集群如果客户端请求量(任务量)多,多个服务器同时处理不同请求(不同任务),如果请求量…...
Android超简单的显示网络图片方法
Android显示网络图片的方法如下: 1、首先,需要在AndroidManifest.xml文件中添加网络权限: <uses-permission android:name"android.permission.INTERNET" /> 2、在布局文件中添加ImageView控件: <ImageVie…...
基于自然语言处理的结构化数据库问答机器人系统
温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目简介 知识库,就是人们总结出的一些历史知识的集合,存储、索引以后,可以被方便的检索出来供后人查询/学习。QnA Maker是用于建立知识库的工具,使用…...
JVM Native内存泄露的排查分析(64M 问题)
我们有一个线上的项目,刚启动完就占用了使用 top 命令查看 RES 占用了超过 1.5G,这明显不合理,于是进行了一些分析找到了根本的原因,下面是完整的分析过程,希望对你有所帮助。 会涉及到下面这些内容 Linux 经典的 64M…...
智能网联汽车基础软件信息安全需求分析
目录 1.安全启动 2.安全升级 3.安全存储 4.安全通信 5.安全调试 6.安全诊断 7.小结 1.安全启动 对于MCU,安全启动主要是以安全岛BootROM为信任根,在MCU启动后,用户程序运行前,硬件加密模块采用逐级校验、并行校验或者混合校…...
《QT从基础到进阶·十八》QT中的各种鼠标事件QEvent
1、界面标题栏事件: NonClientAreaMouseButtonPress 标题栏点击事件 NonClientAreaMouseButtonRelease 标题栏释放事件 bool CustomPopDialog::event(QEvent* event) {switch (event->type()){case QEvent::MouseButtonRelease://Event of mouse releasing wind…...
CSDN中调整图片和文本样式
1.调整图片比例 插入图片后,觉得图片比例不协调,想改小点。只需要在文件后缀加个参数即可:?pic_center 60x。 NOTE:等号左边一定要加个空格,否则格式不生效 2.修改字体颜色 如上 NOTE:等号左边一定要…...
社区团购商品数据抓取
爬虫程序的实现需要使用到C#编程语言以及相关爬虫框架,如Scrapy、WebScraper等。以下是一个简单的示例,展示了如何使用C#爬取网站上的商品数据: using System; using System.Net; using System.IO; using HtmlAgilityPack;class Program {st…...
Nginx用做sip代理
https://www.jianshu.com/p/14d134cbf8d3?tdsourcetags_pcqq_aiomsg 看了这篇文章的方案一,我专门试了试,记录如下: 测试环境为: fs1(5080 --- nginx --- fs2(5060) 局域网同一个网段&…...
C# set的一些使用方法
在C#应用中,使用set监控值的改变触发事件是一种非常常见的编程模式。 比如下面一些应用。 1、属性更改通知:当某个属性的值发生变化时,可以使用set监控属性的改变,并触发一个事件来通知其他部分代码。这在MVVM(Model…...
机器学习——回归
目录 一、线性回归 1、回归的概念(Regression、Prediction) 2、符号约定 3、算法流程 4、最小二乘法(LSM) 二、梯度下降 梯度下降的三种形式 1、批量梯度下降(Batch Gradient Descent,BGD)ÿ…...
JAVA代码视频转GIF(亲测有效)
1.说明 本次使用的是JAVA代码视频转GIF,maven如下: <dependency><groupId>ws.schild</groupId><artifactId>jave-nativebin-win64</artifactId><version>3.2.0</version></dependency><dependency&…...
挑战100天 AI In LeetCode Day03(热题+面试经典150题)
挑战100天 AI In LeetCode Day03(热题面试经典150题) 一、LeetCode介绍二、LeetCode 热题 HOT 100-52.1 题目2.2 题解 三、面试经典 150 题-53.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站,提供各种算法和数据结构的题目&am…...
【手写模拟Spring底层原理】
文章目录 模拟Spring底层详解1、结合配置类,扫描类资源1.1、创建需要扫描的配置类AppConfig,如下:1.2、创建Spring容器对象LyfApplicationContext,如下1.3、Spring容器对象LyfApplicationContext扫描资源 2、结合上一步的扫描&…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...
02.运算符
目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&:逻辑与 ||:逻辑或 !:逻辑非 短路求值 位运算符 按位与&: 按位或 | 按位取反~ …...
