Nginx优化、Nginx+Tomcat实现负载均衡、动静分离集群部署

news/2025/2/19 17:19:33/

Nginx优化、Nginx+Tomcat实现负载均衡、动静分离集群部署

  • 一、Tomcat 优化
  • 二、Tomcat多实例部署
    • 1、安装好jdk
    • 2、安装tomcat
    • 3、配置tomcat环境变量
    • 4、修改tomcat2中的server.xml文件,要求各tomcat实例配置不能有重复的端口号
    • 5、修改各tomcat实例中的startup.sh和shutdown.sh文件,添加tomcat环境变量
    • 6、启动各tomcat中的/bin/startup.sh
    • 7、浏览器访问测试
  • 三、Nginx负载均衡
    • 1、Nginx应用
    • 2、Nginx负载均衡实现原理
  • 四、Nginx动静分离
    • 1、Nginx动静分离实现原理
    • 2、Nginx静态处理优势
  • 五、Nginx+Tomcat负载均衡、动静分离
    • 1、部署Nginx 负载均衡器
    • 2、部署2台Tomcat 应用服务器
    • 3、动静分离配置
    • (1)Tomcat1 server 配置
      • (2)Tomcat2 server 配置
      • (3)Nginx server 配置
    • 4、测试效果
  • 六、Nginx 负载均衡模式
  • 七、Nginx 四层代理配置

一、Tomcat 优化

  • Tomcat默认安装下的缺省配置并不适合生产环境,它可能会频繁出现假死现象需要重启,只有通过不断压测优化才能让它最高效率稳定的运行。优化主要包括三方面,分别为操作系统优化(内核参数优化),Tomcat配置文件参数优化,Java虚拟机(JVM)调优。
vim /usr/local/tomcat/conf/server.xml
......
<Connector port="8080" protocol="HTTP/11.1" 
connectionTimeout="20000" 
redirectPort="8443" --71行--插入
minSpareThreads="50" 
enableLookups="false" 
disableUploadTimeout="true" 
acceptCount="300" 
maxThreads="500" 
processorCache="500"
URIEncoding="UTF-8" 
compression="on" 
compressionMinSize="2048" 
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image /jpg,image/png"/>

Tomcat常用优化选项参数说明

选项名称参数设定
maxThreadsTomcat 使用线程来处理接收的每个请求,这个值表示 Tomcat 可创建的最大的线程数,默认值是 200。
minSpareThreads最小空闲线程数,Tomcat 启动时的初始化的线程数,表示即使没有人使用也开这么多空线程等待,默认值是 10。
maxSpareThreads最大备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值是-1(无限制)。一般不需要指定。
URIEncoding指定 Tomcat 容器的 URL 编码格式,语言编码格式这块倒不如其它 Web服务器软件配置方便,需要分别指定。
connnectionTimeout网络连接超时,单位:毫秒,设置为 0 表示永不超时,这样设置有隐患的。通常默认 20000 毫秒就可以。
enableLookups是否反查域名,以返回远程主机的主机名,取值为:true 或 false,如果设置为 false,则直接返回 IP 地址,为了提高处理能力,应设置为 false。
disableUploadTimeout上传时是否使用超时机制。应设置为 true。
connectionUploadTimeout上传超时时间,毕竟文件上传可能需要消耗更多的时间,这个根据你自己的业务需要自己调,以使Servlet有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效。
acceptCount指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为 100 个。
compression是否对响应的数据进行GZIP压缩,off:表示禁止压缩;on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为 off,压缩数据后可以有效的减少页面的大小,一般可以减小 1/3 左右,节省带宽。
compressionMinSize表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值就是 2048。
compressableMimeType压缩类型,指定对哪些类型的文件进行数据压缩。
noCompressionUserAgents=“gozilla, traviata”对于以下的浏览器,不启用压缩

在这里插入图片描述

二、Tomcat多实例部署

1、安装好jdk

关闭防火墙
安装jdk
rpm检查
rpm安装

2、安装tomcat

cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mkdir /usr/local/tomcat
mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2

3、配置tomcat环境变量

vim /etc/profile.d/tomcat.sh
#tomcat1
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1#tomcat2
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/tomcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2source /etc/profile.d/tomcat.sh

4、修改tomcat2中的server.xml文件,要求各tomcat实例配置不能有重复的端口号

vim /usr/local/tomcat/tomcat2/conf/server.xml
<Server port="8006" shutdown="SHUTDOWN">		#22行,修改Server prot,默认为8005 -> 修改为8006
<Connector port="8081" protocol="HTTP/1.1"		#69行,修改Connector port,HTTP/1.1  默认为8080 -> 修改为8081
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />	#116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010

5、修改各tomcat实例中的startup.sh和shutdown.sh文件,添加tomcat环境变量

vim /usr/local/tomcat/tomcat1/bin/startup.sh 
#-----------------------------------------------------------------------------
#Start Script for the CATALINA Server
#-----------------------------------------------------------------------------
##添加以下内容
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1vim /usr/local/tomcat/tomcat1/bin/shutdown.sh
#-----------------------------------------------------------------------------
#Stop script for the CATALINA Server
#-----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1vim /usr/local/tomcat/tomcat2/bin/startup.sh 
#-----------------------------------------------------------------------------
#Start Script for the CATALINA Server
#-----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2vim /usr/local/tomcat/tomcat2/bin/shutdown.sh
#-----------------------------------------------------------------------------
#Stop script for the CATALINA Server
#-----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2

6、启动各tomcat中的/bin/startup.sh

/usr/local/tomcat/tomcat1/bin/startup.sh 
/usr/local/tomcat/tomcat2/bin/startup.sh netstat -natp | grep java

7、浏览器访问测试

http://192.168.92.12:8080
http://192.168.92.13:8081

三、Nginx负载均衡

1、Nginx应用

  • Nginx是一款非常优秀的HTTP服务器软件
    • 支持高达50000个并发连接数的响应
    • 拥有强大的静态资源处理能力
    • 运行稳定
    • 内存、CPU等系统资源消耗非常低
    • 目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,提升整个站点的负载并发能力

2、Nginx负载均衡实现原理

  • Nginx实现负载均衡是通过反向代理实现

  • 反向代理原理

  • Nginx服务器作为前端,Tomcat服务器作为后端,web页面请求由Nginx服务来进行转发。

  • 但是不是把所有的web请求转发,而是将静态页面请求Nginx服务器自己来处理,动态页面请求,转发给后端的Tomcat服务器来处理。

  • 据我们所知,Tomcat是属于轻量级的应用服务器,可接受访问量可能会不足,所以我们需要多台Tomcat服务器,然后通过Nginx配置权来进行挑选Tomcat服务器去进行处理,负载均衡的一种策略。

  • Nginx服务器

1、首页使用精准匹配
2、静态页面使用正则匹配自己处理
3、动态页面使用正则匹配jsp结尾的请求,使用proxy_pass转发给Tomcat服务器
  • Nginx配置反向代理的主要参数
upstream 服务池名{}配置后端服务器池,以提供响应数据
proxy_pass http://服务池名配置将访问请求转发给后端服务器池的服务器处理

四、Nginx动静分离

1、Nginx动静分离实现原理

  • 服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发至后端

2、Nginx静态处理优势

  • Nginx处理静态也没面的效率远高于Tomcat的处理能力
  • 若Tomcat的请求量为1000次,则Nginx的请求量为6000次
  • Tomcat每秒的吞吐量为0.6M,Nginx的每秒的吞吐量为3.6M
  • Nginx处理静态资源的能力是Tomcat处理的6倍

五、Nginx+Tomcat负载均衡、动静分离

Nginx作为负载均衡器,Tomcat作为应用服务器Nginx 服务器:192.168.92.11:80
Tomcat服务器1:192.168.92.12:80
Tomcat服务器2:192.168.92.13:8080  192.168.92.13:8081

1、部署Nginx 负载均衡器

systemctl stop firewalld
setenforce 0yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ makeuseradd -M -s /sbin/nologin nginxcd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \									#启用文件修改支持
--with-http_stub_status_module \					#启用状态统计
--with-http_gzip_static_module \					#启用 gzip静态压缩
--with-http_flv_module \							#启用 flv模块,提供对 flv 视频的伪流支持
--with-http_ssl_module								#启用 SSL模块,提供SSL加密功能./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_modulemake && make installln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

在这里插入图片描述
在这里插入图片描述


vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.targetchmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

在这里插入图片描述
在这里插入图片描述

2、部署2台Tomcat 应用服务器

systemctl stop firewalld
setenforce 0tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATHsource /etc/profiletar zxvf apache-tomcat-8.5.16.tar.gzmv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.shnetstat -ntap | grep 8080

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3、动静分离配置

(1)Tomcat1 server 配置

mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>   #指定为 test1 页面
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
</html>vim /usr/local/tomcat/conf/server.xml
#由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true"></Context>
</Host>/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh 

在这里插入图片描述

(2)Tomcat2 server 配置

mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/testvim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>   #指定为 test2 页面
</head>
<body>
<% out.println("动态页面 2,http://www.test2.com");%>
</body>
</html>vim /usr/local/tomcat/tomcat1/conf/server.xml
#删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />
</Host>/usr/local/tomcat/tomcat1/bin/shutdown.sh 
/usr/local/tomcat/tomcat1/bin/startup.sh vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test3 page</title>   #指定为 test3 页面
</head>
<body>
<% out.println("动态页面 3,http://www.test3.com");%>
</body>
</html>vim /usr/local/tomcat/tomcat2/conf/server.xml
#删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/tomcat2/webapps/test" path="" reloadable="true" />
</Host>/usr/local/tomcat/tomcat2/bin/shutdown.sh 
/usr/local/tomcat/tomcat2/bin/startup.sh 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)Nginx server 配置

#准备静态页面和静态图片
echo '<html><body><h1>这是静态页面</h1></body></html>' > /usr/local/nginx/html/index.html
mkdir /usr/local/nginx/html/img
cp /root/game.jpg /usr/local/nginx/html/imgvim /usr/local/nginx/conf/nginx.conf
......
http {
......#gzip on;#配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大upstream tomcat_server {server 192.168.92.11:8080 weight=1;server 192.168.92.12:8080 weight=1;server 192.168.92.12:8081 weight=1;}server {listen 80;server_name www.kgc.com;#access_log logs/host.access.log main;#配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理location ~ .*\.jsp$ {proxy_pass http://tomcat_server;
#设置后端的Web服务器可以获取远程客户端的真实IP
##设定后端的Web服务器接收到的请求访问的主机名(域名或IP、端口),默认HOST的值为proxy_pass指令设置的主机名。如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来在反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。proxy_set_header HOST $host;
##把$remote_addr赋值给X-Real-IP,来获取源IPproxy_set_header X-Real-IP $remote_addr;
##在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}#配置Nginx处理静态图片请求location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {root /usr/local/nginx/html/img;expires 10d;}location / {root html;index index.html index.htm;}
......}
......
}

在这里插入图片描述
在这里插入图片描述

4、测试效果

测试静态页面效果
浏览器访问 http://192.168.92.11/
浏览器访问 http://192.168.92.11/game.jpg测试负载均衡效果,不断刷新浏览器测试
浏览器访问 http://192.168.80.10/index.jsp

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、Nginx 负载均衡模式

  • rr 负载均衡模式

    每个请求按时间顺序逐一分配到不同的后端服务器,如果超过了最大失败次数后(max_fails,默认1),在失效时间内(fail_timeout,默认10秒),该节点失效权重变为0,超过失效时间后,则恢复正常,或者全部节点都为down后,那么将所有节点都恢复为有效继续探测,一般来说rr可以根据权重来进行均匀分配。

  • least_conn 最少连接

    优先将客户端请求调度到当前连接最少的服务器。

  • ip_hash 负载均衡模式

    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题,但是ip_hash会造成负载不均,有的服务请求接受多,有的服务请求接受少,所以不建议采用ip_hash模式,session 共享问题可用后端服务的 session 共享代替 nginx 的 ip_hash。

  • fair(第三方)负载均衡模式

    按后端服务器的响应时间来分配请求,响应时间短的优先分配。

  • url_hash(第三方)负载均衡模式

    和ip_hash算法类似,是对每个请求按url的hash结果分配,使每个URL定向到一个同 一个后端服务器,但是也会造成分配不均的问题,这种模式后端服务器为缓存时比较好。

七、Nginx 四层代理配置

  • 我这边是通过yum安装的nginx!配置文件在 /etc/nginx/nginx.conf 或者 /etc/nginx/con.f/default.conf
和http同等级:所以一般只在http上面一段设置:
vim nginx.conf stream {log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';access_log  /var/log/nginx/k8s-access.log  main;upstream appserver{server 192.168.92.11:80 weight=1;        			#此处是加上server 192.168.92.14:80 weight=1;}server {listen 8080;proxy_pass appserver;}
}
http {
……vim conf.d/default.confserver {listen       8080;server_name  www.xc.com;#access_log  /var/log/nginx/host.access.log  main;location / {root   /usr/share/nginx/html;index  index.html index.htm;}
……

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/247337.html

相关文章

基于lamp搭建Discuz论坛

Discuz!是腾讯&#xff08;Tencent&#xff09;旗下 Comsenz 公司推出的以社区为基础的专业建站平台&#xff0c;帮助网站实现一站式服务。让论坛&#xff08;BBS&#xff09;、个人空间&#xff08;SNS&#xff09;、门户&#xff08;Portal&#xff09;、群组&#xff08;Gro…

论坛php board,Crossday Discuz! Board 论坛系统Discuz!

Crossday Discuz! Board 论坛系统(简称 Discuz! 论坛&#xff0c;中国国家版权局著作权登记号 2006SR11895)是一个采用 PHP 和 MySQL 等其他多种数据库构建的高效论坛解决方案。作为商业软件产品&#xff0c; Discuz! 在代码质量&#xff0c;运行效率&#xff0c;负载能力&…

Discuz论坛附件下载权限绕过漏洞

近日&#xff0c;有网友在乌云上发布了一则Discuz论坛附件下载权限绕过漏洞&#xff0c;能够任意下载带有权限的附件并且无需扣除自身积分。目前Discuz正在处理中&#xff0c;但暂未放出漏洞补丁&#xff0c;有需要的朋友不妨趁漏洞修补之前到各论坛大肆搜刮一番。 漏洞重现步…

php绕过授权下载,Discuz附件下载权限绕过方法

越权下载含有“阅读权限”的插件、下载插件免扣币 重现步骤&#xff1a; 1、使用管理员账户&#xff0c;上传一个有高阅读权限的附件 2、使用低权限的用户账户&#xff0c;下载附件&#xff0c;这个时候&#xff0c;Discuz会提示无权下载 此时&#xff0c;浏览器中的附件地址形…

Discuz论坛超漂亮手机模板

介绍&#xff1a; 一、首页&#xff1a;门户首页波浪幻灯片显示&#xff08;可选开关&#xff09; 首页添加了“最新”“精华”“热帖”“回复”四种显示浏览方式&#xff1b; 美化帖子列表显示&#xff0c;添加圆弧边样式显示&#xff1b;等级样式&#xff0c;不同的等级有不…

免费discuz 白色简洁论坛类源码下载

网站模板库&#xff1a; 我们提供的模板下载大部分均为网盘下载方式&#xff0c;请打开相应网盘链接输入提取码即可下载&#xff01; 下载地址&#xff1a; http://www.bytepan.com/KHRv0PvXBmo 模板描述&#xff1a; 该模板网站很容易吸引访客点击&#xff0c;提升ip流量和…

discuz论坛安装流程

discuz论坛安装流程 作者&#xff1a;蓝眼泪 实验环境&#xff1a;xshell7&#xff0c;xftp7&#xff0c;centos7.9&#xff0c;win7. 本人用LAMP方式安装discuz论坛&#xff0c;并试验成功。原创不易&#xff0c;且行且珍惜。免费分享给大家。一起交流&#xff0c;共同进步…

手动搭建 Discuz! 论坛

手动搭建 Discuz! 论坛 本文以腾讯云服务器为例&#xff0c;做出详解&#xff01; 操作场景 Discuz! 是全球成熟度最高、覆盖率最大的论坛网站软件系统之一&#xff0c;被200多万网站用户使用。您可通过 Discuz! 搭建论坛&#xff0c;本文档介绍在腾讯云云服务器上搭建 Disc…