Docker搭建Nginx实现SpringBoot+Nginx集群

news2025/7/22 11:10:39

1,首先聊聊什么Nginx?

Nginx 是一个高性能的HTTP和反向代理web服务器,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx部署在性能较好的服务器上,并发能力可以达到5W以上。

Nginx完全开源,并且有很多基于Nginx二次开发的工具,性能更强。


Nginx是一个反向代理的web服务器,就是作为客户端请求入口的存在


Nginx提供了非常丰富的负载均衡策略


Nginx提供了动静分离策略,可以将动态资源转发给Tomcat,静态资源直接去本地找


Nginx最大的特点就是并发能力强,占用内存低,并且可以实现7*24小时不间断运行

2,为什么要用Nginx,如果不用Nginx的现存问题是什么?

在上面介绍了Nginx的好处之后,相比对Nginx有一定的了解了,在企业中实际项目如果不适用Nginx会存在的问题大体如下:

  • 在单体架构服务搭建集群后,客户端请求没有统一的入口

  • 在单体架构服务搭建集群后,如果尽量打散客户端的请求

  • Tomcat中既部署静态资源,又部署动态资源,导致Tomcat压力太大

  • Tomcat作为处理业务的服务器,并发能力比较差

3,了解了Nginx之后,接下来就是实际搭建Nginx并且演示Nginx的反向代理和负载均衡两大功能。

这里采用Docker搭建Nginx,用docker-compose.yml文件进行管理

docker-compose.yml 简单配置一下 

注意,添加数据卷,映射容器内部的/etc/nginx/conf.d目录,方便修改路由规则配置

version: '3.1'
services:
  nginx:
    image: nginx:1.22
    container_name: nginx
    ports:
      - 80:80
    volumes:
      - ./conf.d/:/etc/nginx/conf.d/

4,了解一下Nginx的配置文件:

 

5,接下来需要在映射的文件中conf.d创建一个后缀名为 .conf的文本,主要是在这个文本中配置代理和集群,注意在文本中要搭建集群就得在upstream中配置

upstream  minios{
  server 120.76.159.196:8081;
  server 120.76.159.196:8082;
}

server{
  listen 80;
  server_name localhost;

  location /  {
    root /usr/share/nginx/html/;
    index index.html;
  }

  location /read  {
    proxy_pass http://minios;
    proxy_redirect default;
  }

  location /up  {
    proxy_pass http://120.76.159.196/8083;
  }

}

 

6,了解一下:Nginx中的路径匹配规则

7,配置完文本之后,启动容器,接下来就直接演示集群环境下,这里启动了2个Springboot的(端口号不同)项目,

相端口号为8081,8082。

如图所示:

1,SpringBoot项目注意打成jar包,并且需要在maven里配置如下所示

<build>
    <finalName>serve2</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <executable>true</executable>
            </configuration>
        </plugin>
    </plugins>
</build>

2,在linux上项目后台运行,执行日志存储在一个文本中,指令如下:

nohup java -jar serve2.jar >output2.log 2>&1 &

3,启动过程中遇到端口号占用情况,则需要关闭端口,指令如下:

  netstat -ntlp | grep 8082    (找到端口对应的进程)
  1078  kill -9 366721          (杀掉进程)

测试: http://120.76.159.196/read (这里不用写端口号) 不停的请求这个地址,集群默认采用轮询策略,效果如下:可以看到是一个轮询访问的状态

第一次请求

第二次请求

8,Nginx的集权下的访问策略很多,默认是采用轮询策略,基本上实际工作当中也是采用默认的轮询策略,接下来了解一下Nginx的轮询策略

1,轮询策略:默认情况下,Nginx的负载均衡策略就是轮询,不需要添加额外的配置。

轮询权重:在服务器配置不一致时,应当选择轮询权重策略,根据服务器配置的不同,或者应用的处理能力不同,设置不同的权重值,设置请求分发的比例。

upstream tomcats {
  server 192.168.41.41:8081 weight=200;
  server 192.168.41.41:8082 weight=50;
}

2,ip_hash:根据客户端请求的ip地址,确定请求转发到哪台服务器,只要ip不变,路由的服务器就不变。但是很多JVM缓存同步的问题,依然无法处理

upstream tomcats {
  ip_hash;
  server 192.168.41.41:8081;
  server 192.168.41.41:8082;
}

3,fair:根据响应时间权重,根据服务器的响应时间决定请求转发的策略

upstream tomcats {
  fair;
  server 192.168.41.41:8081;
  server 192.168.41.41:8082;
}

4,url_hash:根据请求路径转请求转发

upstream tomcats {
  hash $request_uri; hash_method crc32;
  server 192.168.41.41:8081;
  server 192.168.41.41:8082;
}

好啦,Nginx的基本了解和应用就到此结束了...

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

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

相关文章

linux三剑客awk、sed、grep与cut的总结

在Linux中&#xff0c;一切皆文件&#xff0c;对Linux的操作就是对文件的处理。对文件操作处理最重要的三个命令是grep、sed、awk&#xff0c;它们在业界被称为“三剑客”。 三剑客的功能非常强大&#xff0c;但它们各自有分别擅长的功能&#xff1a; grep擅长对文件或字符串进…

【操作系统】2.3 进程同步与互斥

这一节大概是操作系统中最难的一节了。 2.3.1 进程的同步与互斥 2.3.1 进程的同步与互斥_StudyWinter的博客-CSDN博客_进程同步思维导图 进程同步&#xff1a;在多道程序环境下&#xff0c;进程是并发执行的&#xff0c;不同进程之间存在着不同的相互制约关系。为了协调进程之…

C#界面里Form.Language 属性的使用

C#界面里Form.Language 属性的使用 现在面向全球化的应用软件、应用系统越来越多。 比如游戏正在走向全球化时代,很多游戏的服务器也会安装到各个国家去,也会请当地人来管理游戏的服务器。 这时开发的软件,就需要面向各种语言,比如英语、日语、阿拉佰语等等。 如果你正在…

什么叫共同富裕,刘强东给老板们打了个样

这两天&#xff0c;热搜上最火的男人&#xff0c;除了汪小菲&#xff0c;就是刘强东无疑了。 11月22日&#xff0c;刘强东发出了一封京东内部员工信&#xff0c;引发热议。 信里主要说了4点&#xff1a; 1、自明年1月1日起&#xff0c;为所有德邦员工缴齐五险一金&#xff1…

YOLOv5识别图像内苹果和香蕉

YOLOv5为目标检测带来了极大的方便。通过简单地训练YOLOv5&#xff0c;即可以实现一个速度快、性能高的目标检测系统。 下面介绍如何从头开始构造一个简单的目标检测系统&#xff0c;用来识别图像内的苹果和香蕉&#xff0c;并标注他们所在的位置。 特别强调的是&#xff0c;…

HTML5学习笔记(三)

离线应用 HTML5新增了一个离线存储的API&#xff0c;用于实现本地数据的缓存&#xff0c;从而使得开发离线应用成为可能。 所谓“离线存储”&#xff0c;指的是建立一个URL列表&#xff0c;该列表可以包含HTML文件、CSS文件、JavaScript文件和图片等。当与服务器建立连接时&am…

dragTabs(vue)

vue实现tabs拖拽 效果图 dragTab.vue <template><div class"yh-tabs"><draggable :list"tabList" :group"groupName" animation"300" item-key"id" end"dragEnd"><template #item"{ …

CANoe-vTESTstudio之Test Diagram编辑器(功能介绍)

1. 阶段 Test Diagram从测试设计到测试执行,分为5个阶段: Test Design 在测试设计阶段,测试设计人员使用图形元素和分配的测试代码对测试用例进行建模。这个阶段的结果是生成一个测试图表 Evaluation 生成的测试图表,需要评估其正确性。在评估期间,将验证各个元素及其…

3.7 学会这2招,让你的笔记分分钟上热门 【玩赚小红书】

什么是上热门&#xff1f; 上热门之前&#xff0c;我们先了解一下什么是上热门。上热门就是笔记被系统主动推荐&#xff0c;并在很长一段时间里&#xff0c;有源源不断的粉丝点赞、收藏&#xff0c;相当于平台给你的笔记开了专属流量口&#xff0c;推送给那些平常关注该笔记类型…

vue实战项目之vue-cli脚手架搭建过程详解

目录 1.可以参考vue-cli的中文文档进行下载安装 2.查看node和npm版本 3.安装依赖包 4.依赖包以前版本太老&#xff0c;如何更新&#xff1f; 5.创建一个项目 6.图形化界面 1.可以参考vue-cli的中文文档进行下载安装 vue-cli中文文档 2.查看node和npm版本 在cmd或者编译…

【数据库原理及应用】——关系数据库的规范化理论(学习笔记)

&#x1f4d6; 前言&#xff1a;关系数据库的规范化理论是数据库设计的一个理论指南&#xff0c;提供了判断一个关系模式优劣的理论依据。本章讨论的关系数据库的规范化理论主要包含三方面内容&#xff1a;函数依赖、范式和模式分解准则。函数依赖起着核心作用&#xff0c;是模…

易基因|TSD物种全基因组DNA甲基化模式对孵育性别和过去孵育温度的响应 | 性别决定

易基因&#xff5c;TSD物种全基因组DNA甲基化模式对孵育性别和过去孵育温度的响应 | 性别决定 大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 2022年8月23日&#xff0c;《MOLECULAR ECOLOGY》杂志发表题为“Genome-wide DNA methyla…

[附源码]java毕业设计幼儿园管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]Python计算机毕业设计二手书交易软件设计与实现

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

嵌入式驱动初级-字符设备驱动基础

文章目录前言一、驱动学习预备知识1.什么是设备驱动程序2.向内核添加新功能方法2.1新功能源码与Linux内核源码不在同目录下2.2在Ubuntu下加载和删除ko文件步骤2.3在开发板下加载和删除ko文件步骤2.4内核模块基础代码解析二、字符设备驱动框架2.1Linux内核对设备的分类2.2字符设…

css点击文字(非按钮) 能自动改变颜色。

实现功能说明&#xff1a; 如下图&#xff0c;点击不同的文字能够切换不同的页面&#xff0c;同时这个tab的文字能够相应的变色&#xff0c;其他未选中的状态默认为灰色。 方案一&#xff1a; 使用css的伪类。 :active&#xff0c;元素被点击时变色&#xff0c;但颜色在点击后…

为什么 NGINX 的 reload 命令不是热加载?

这段时间在 Reddit 看到一个讨论&#xff0c;为什么 NGINX 不支持热加载&#xff1f;乍看之下很反常识&#xff0c;作为世界第一大 Web 服务器&#xff0c;不支持热加载&#xff1f;难道大家都在使用的 nginx -s reload 命令都用错了&#xff1f;带着这个疑问&#xff0c;让我们…

DiffusionDet: Diffusion Model for Object Detection

paper: https://arxiv.org/abs/2211.09788 code&#xff1a;https://github.com/ShoufaChen/DiffusionDet 探索了扩散模型在非生成类任务&#xff08;目标检测&#xff09;中的应用。相较于传统Coarse-to-fine方法&#xff0c;基于扩散思路训练有两个特点&#xff1a;1&…

网络编程/计算机网络

目录 一、网络基本概念 1.网络 2.互联网 3.ip地址 4.MAC地址 5.端口号Port 6.网络协议 二.网络分层模型 1.数据链路层 2.网络层 3.传输层 4.应用层 三、网络应用程序通信流程 四、socket 网络编程 1.主机字节序列和网络字节序列 2.套接字地址结构 &#xff08…

离群点检测和新颖性检测

引言 在异常检测领域中&#xff0c;我们常常需要决定新观测点是否属于与现有观测点相同的分布&#xff0c; &#xff08;则称它们为inlier),或被认为是不同的(outlier). 在这里&#xff0c;必须做出两个重要的区别&#xff1a; 异常值检测&#xff1a;outlier detection 训练…