【SpringBoot】SpringBoot整合Nginx的全部流程

                             SpringBoot整合Nginx的全部流程

对Nginx还不了解的同学可以先看这篇文章Nginx 相关介绍(Nginx是什么?能干嘛?)

今天的目标是将SpringBoot项目由默认部署方式(jar)替换成war形式,部署在同一台电脑上的两个不同端口的tomcat上,利用Nginx做反向代理,将请求自由的映射到不同端口的tomcat中。


第一步:将SpringBoot项目由默认部署方式(jar)替换成war形式

(1)设置打包方式为war

    <groupId>com.sun</groupId><artifactId>mydata</artifactId><version>0.0.1-SNAPSHOT</version><!--因为要放入外部的tomcat中,因此更改默认打包方式(jar)为war包--><packaging>war</packaging><name>mydata</name><description>Demo project for Spring Boot</description>

(2)将SpringBoot内置的Tomcat在发布时剔除,provided表示该包只在编译和测试中使用,在发布时去除。而在发布时,此依赖由servlet容器即Tomcat提供。更详细的解释Maven依赖Scope选项详解

PS:不推荐在spring-boot-starter-web直接将tomcat移除,否则需要添加servlet-api依赖。

       <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency>

(3)由于SpringBoot项目没有传统的web.xml文件,因此我们需要在缺少web.xml文件的情况下构建war包,需要添加以下配置。

    <plugin><artifactId>maven-war-plugin</artifactId><version>2.6</version><configuration><!--如果想在没有web.xml文件的情况下构建WAR,请设置为false。--><failOnMissingWebXml>false</failOnMissingWebXml></configuration></plugin>

(4)更改项目启动类,将之前的启动类删除,新建启动类,继承SpringBootServletInitializer类,重写configure方法,即将启动类交给Servlet容器进行启动。

package com.sun.mydata;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;@SpringBootApplication
public class TMydataApplication extends SpringBootServletInitializer {public static void main(String[] args) {SpringApplication.run(TMydataApplication.class, args);}@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder.sources(TMydataApplication.class);}
}

(5)使用maven package打包项目,拿到war包。

至此,war包已经打包好了。可以修改前端界面,形成两个不同的war包。

之后需要将war包分别放入不同的Tomcat的webapp中。


第二步:在一台机器上配置两个Tomcat

(1)下载Tomcat8,否则低版本的Tomcat启动时,报出找不到javax/el/ELManager类等错误。

(2)下载的Tomcat复制一份,修改这两个Tomcat的配置。

         1)避免两个Tomcat启动混乱,需要设置不同CATALINA_HOME

具体方式:修改Tomcat安装目录内的bin/startup.bat,添加以下代码中的中间内容

JAVA_HOME是JDK的安装目录,CATALINA_HOME是对应的Tomcat的安装目录,分别对这两个Tomcat进行修改。

setlocalSET "JAVA_HOME=C:\Java\jdk1.8.0_201"
SET "CATALINA_HOME=D:\tomcat\tomcat2\apache-tomcat-8.5.41"rem Guess CATALINA_HOME if not defined

          2)修改Tomcat的端口,防止端口冲突。

仅修改第二个Tomcat安装目录下的conf/server.xml,修改Server port="8006"、Connector port="8081"、redirectPort="8444"、Connector port="8010"、redirectPort="8444"。基本上加1就可以,为了防止潜在的端口冲突,都改了保险点。但Connector port="8081"是必须要改的

          3)设置不加项目名访问,和SpringBoot的访问路径保持一致。

修改Tomcat安装目录下的conf/server.xml,在Host标签下加入该配置。path表示映射后的访问路径,即不需要项目名,docBase表示物理路径,即解压后的war包所处的绝对路径或相对路径。

     <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true"><Context path="/" docBase="D:\tomcat\tomcat2\apache-tomcat-8.5.41\webapps\mydata-0.0.1-SNAPSHOT" reloadable="false"></Context></Host>

此时运行Tomcat安装目录下的bin/startup.bat,可以看到项目正常启动了,但启动的控制台界面可能输出乱码,如下图。

最简单的修改方式为:修改conf/logging.properties下47行左右的UTF-8为GBK

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.encoding = GBK

再次启动Tomcat,可以看到现在的控制台没有乱码了。

同理,对第二个Tomcat进行以上的配置

测试一下能够访问主界面

看出来,部署成功了。


最后一步,配置Nginx,这一步相比与之前的配置,简单多了。

(1)修改Nginx安装目录下的conf/nginx.conf,在以下位置设置服务器集群地址。

即添加upstream [name]{...},这个name随便起,不过接下来会用到,需要保持一致。

weight是请求的分配权重,权重越大,对应的Tomcat上接收的请求就越多。

 #keepalive_timeout  0;keepalive_timeout  65;#gzip  on;upstream mydata {server 127.0.0.1:8080 weight=1;server 127.0.0.1:8081 weight=1;}server {listen       80;server_name  localhost;

(2)添加请求转发规则,依然是在nginx.conf中配置。

即通过proxy_pass 配置请求转发地址,访问nginx代理服务器时跳转到指定的服务器。当我们依然输入http://localhost:80 时,请求会跳转到我们配置的服务器。

其中mydata就为之前的name,当我们访问/时,Nginx自动将请求转发至mydata集群中的任意一个Tomcat中。

#charset koi8-r;#access_log  logs/host.access.log  main;location / {proxy_pass http://mydata;proxy_redirect default;  }#error_page  404              /404.html;

更详细的Nginx的配置与说明,参考nginx配置集群,以springboot为例

最后启动Nginx安装目录下的nginx.exe。

在地址栏中输入localhost,即可看到Nginx已经将请求转发至某一个Tomcat中了,不停刷新的话,会出现不同的界面,即分配到不同的Tomcat中(如果界面一直没有变化,可能是浏览缓存造成的,需要在每次的刷新前清除缓存

第一次点击:

第二次点击:

可见,Nginx已经起到了作用,对整个Tomcat集群做了负载均衡。

到这里,我们就全部配置好了。

关于一致性Session处理,可以单独部署Redis用作Session控制。

更多的架构,可以参考这篇文章高并发的解决方案

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Excel数据动态看板制作:数据处理、数据分析、看板制作、插入切片器、图表类型

Excel数据动态看板制作-以教师薪酬统计为例 一、数据处理二、数据分析三、看板制作四、插入切片器五、图表类型 原始数据如图所示&#xff1a; 一、数据处理 1、工龄计算&#xff1a;DATEDIF(G3,TODAY(),“Y”) 2、工龄工资计算&#xff1a;IF(H350>500,500,H350) 3、…

网页在线编辑表格|仿Excel|特定表头后超级爽

最近公司开发的EMIS系统有个模块需要按excel格式写&#xff0c;原先有个estartable插件&#xff0c;我们经理写的&#xff0c;在原来的模块上面很好用&#xff0c;由于我水平有限&#xff0c;我在短期内不能清晰的修改或扩展它&#xff0c;最近掌握了angularJS&#xff0c;突发…

UiPath中表格排序与筛选的运用

1&#xff0c;首先准备好一个表&#xff0c;例如有以下一张成绩表&#xff1a; 2&#xff0c;排序 &#xff08;1&#xff09;,根据总分来降序排序 如果你不知道表格的名称的话就在Excel表中找到开发工具里的表设计&#xff0c;跟着步骤来就可以找到了。 &#xff08;2&#x…

【炫酷EXCEL】可视化分析动态看板

本文章最终展示效果图 简单EXCEL可视化面板效果展示 利用EXCEL的透视表、切片器和数据透视图实现简单可视化数据分析 数据透视表 鼠标选中自己表格随便一个单元格→点击主菜单栏→插入→数据透视表 选中数据分析中的框选部分&#xff0c;可以进行编辑操作&#xff0c;选择你自…

excel图片技巧:如何为报表配上节日祝福动画

偶尔跳跃一下&#xff0c;改变一下&#xff0c;哪怕被说成是“拍马屁”也行&#xff0c;因为&#xff0c;快乐、传递快乐是一种幸福&#xff0c;是内心本身就有的欲望。提升自己在同事和领导心里的形象只是传递快乐的附加值。 圣诞节就快到了&#xff0c;发送报表的时候附带一个…

使用Excel制作公众号数据看板

为监控公众号日常数据&#xff0c;制作昨日公众号关键指标数据看板。 键入标题&#xff1a;公众号昨日关键指标&#xff1b; 使用VLOOKUP函数查找出昨日新关注人数、取消关注人数、净关注用户、累计用户数&#xff08;包含取消关注&#xff09;&#xff1b; 函数&#xff1a;V…

Web开发中数据表格常见的7类筛选设计

文章转载自&#xff1a;http://www.woshipm.com/pd/653433.html 目录 1、以搜索的形式进行筛选 2、标签加搜索 3、搜索加高级选项 4、tab的形式切换 5、list筛选 6、全部显示筛选 7、带标签多项筛选 结语 1、以搜索的形式进行筛选 输入框可以输入用户关心的内容&#…

推荐多款好看的报表图表配色方案(转载)

好看的图表离不开配色&#xff0c;好看的PPT离不开配色&#xff0c;好看的大屏可视化分析更离不开配色。 博主平时也要做一些数据可视化分析的大屏&#xff0c;一般都需要对背景、图表、数据列表等区域进行配色&#xff0c;根据美工那边的配色推荐&#xff0c;博主整理了一下平…

Vue之功能全面的表格(三)筛选表格中的数据

文章目录 学习计划状态过滤学习完成时间过滤搜索框过滤小结 学习计划状态过滤 1、对学习计划状态列进行美化 data () {return {data: [],filterType: ,statuses: [未开始, 进行中, 搁置, 完成], // 修改statusColors: [info, primary, warning, success] // 新…

ChatGPT时代:我们可能站到了自然语言编程的大门口

ChatGPT大火&#xff0c;我现在有种感觉&#xff1a;我们可能站到了自然语言编程的门口&#xff0c;一脚下去&#xff0c;也许能把门踹开。 当然&#xff0c;也可能会踢到一块铁板。 回顾我们的编程之路&#xff0c;基本上就是一个编程门槛不断降低的历史。 最早的一批前辈们…

ChatGPT对我们的影响-ChatGPT能给我们带来什么

ChatGPT日常应用 ChatGPT是一种应用广泛的自然语言处理算法&#xff0c;其可以应用于多种日常场景。以下是一些ChatGPT的日常应用&#xff1a; 聊天机器人&#xff1a;ChatGPT可用于构建聊天机器人&#xff0c;通过与用户进行自然语言交互来提供个性化的服务和支持。 新闻稿和…

申论范文:共同富裕“一定”会考的点

共同富裕是社会主义的本质要求&#xff0c;是中国式现代化的重要特征&#xff0c;当然也是公务员考试的热点&#xff0c;需要我们认真学习掌握。 今天&#xff0c;我们就用一篇申论范文&#xff0c;一起试试。 ⭐️ ⭐️ ⭐️ ⭐️ ⭐️ ⭐️ 这里是公考隔壁班王老师独创的“…

这碗申论鸡汤,干了

如题&#xff0c;大家周末快乐~ ⭐️ ⭐️ ⭐️ ⭐️ ⭐️ ⭐️ 这里是公考隔壁班王老师独创的“每天半小时&#xff65;申论80分”抄写团&#xff0c;欢迎加入我们&#xff01;

申论小题赏析

第一段 第一段很明显是一个话题引入的段落&#xff0c;所以不用去管它 第二段 是绿色革命的话题引入&#xff0c;点出煤炭在建设绿色革命的过程中并不是包袱&#xff0c;通过煤矿改扩改建的过程中既满足了绿色城市的建设也满足了生产发展的需求&#xff0c;带动了经济的发展…

申论基础知识1

文章目录 前言第一章&#xff1a;审题第二章&#xff1a;单一题一、问题二、影响二、影响三、对策概括对策提出对策 前言 第一章&#xff1a;审题 第二章&#xff1a;单一题 一、问题 二、影响 二、影响 三、对策 概括对策 提出对策

计算机考试怎么考申论,公务员考试申论评分标准,这些你都知道吗?

原标题&#xff1a;公务员考试申论评分标准&#xff0c;这些你都知道吗&#xff1f; 距离2019年多省公务员考试还剩两三天时间&#xff0c;很多考生对公务员考试的阅卷规则和答题格式并不清楚&#xff0c;其实了解阅卷规则和评分标准&#xff0c;对大家答题更有帮助。下面华图教…

粉笔公考——错题集——申论

做题tips 综合 面向考试&#xff0c;多做题、多积累。 提升答题能力。尽量用原文表述。回归材料。针对问题&#xff0c;全面分析材料。反面材料也要概括&#xff0c;反面正说。提炼观点。归纳总结。推导要把握好度&#xff0c;精准、切合材料。 小题 摘抄概括归纳分析推导。…

申论~~~

方法精讲—申论 摘抄&#xff1a; [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BbhvGncP-1666248488455)(…/…/AppData/Roaming/Typora/typora-user-images/image-20211004205502958.png)] 归纳概括&#xff1a; 分析推导&#xff1a; [外链图…

计算机考试怎么考申论,申论高分卷是怎么来的?申论阅卷流程大揭秘

申论的阅卷方式与行测的阅卷方式不同&#xff0c;行测全部为客观题&#xff0c;因此可以采用机读阅卷的方式&#xff0c;而申论全部为主观性试题&#xff0c;必须由专业阅卷人员进行阅卷。正因为如此&#xff0c;很多考生就会担心阅卷人的主观喜好会影响其评分标准。对此&#…

人民日报申论万能结构

本周我们又学习了5篇人民日报申论范文&#xff0c;分别为&#xff1a; 1.《更好满足群众多层次健身需求》&#xff08;3.7日&#xff0c;周一&#xff09; 2&#xff0e;《让社区成为居民最放心最安心的港湾》&#xff08;3.8日&#xff0c;周二&#xff09; 3.《共同呵护文…