Nginx负载均衡、动静分离Tomcat案例实战
一、前言
1)Tomcat是一款开源的、免费的WEB软件服务器,是隶属于Apache基金会旗下的,主要是用于去发布网站代码、提供网页信息服务的。用户通过浏览器可以实现网站页面的访问。
2)Tomcat WEB软件默认可以处理静态网页(Apache、Nginx),同时也可以处理动态网页,主要是处理JSP动态网页,JSP(Java Server Pages)是基于Java语言开发的动态网站程序。
静态网页:一般是跟后端数据库不发生交互的网页,网页内容很少更新或者几乎不更新的,其网页文件后缀命名通常是.htm、.html、.xml等结尾的。
动态网页:一般是跟后端数据库发生交互的网页,网页内容经常更新或者随着后端数据库内容变化而更新的,其网页文件后缀命名通常是.asp、.jsp、.php等结尾的。
3)Java、JDK、Tomcat三者之间的关系?
Java是一门面向对象的编程语言,JDK是Java语言开发的环境、SDK工具包,同时JDK也是Java程序运行所需的环境(JRE:JVM虚拟机+Java类、库),Tomcat软件自身是基于Java语言开发的。
4)基于CentOS、Rocky Linux 9.x系统,部署一套Tomcat WEB集群(提前配置JDK环境),采用二进制Tar包方式。部署的方法和指令如下:
#从Apache官网下载tomcat软件包; ls -l apache-tomcat-9.0.7.tar.gz #通过Tar工具对其解压;(-x extract解压,-z gzip压缩格式,-v verbose详细显示,-f file文件属性) tar -xzvf apache-tomcat-9.0.7.tar.gz #Cd切换至Tomcat解压目录; cd apache-tomcat-9.0.7/ #创建4个Tomcat实例的部署目录; for i in $(seq 1 4);do mkdir -p /usr/local/tomcat_v$i.jfedu.net/ ;done #将解压后的Tomcat程序文件拷贝至部署目录即可; for j in `seq 1 4`;do \cp -a * /usr/local/tomcat_v$j.jfedu.net/ ;done #修改4个Tomcat服务端口(8005:8001-8004 8080:8081-8084 8009:8111-8114); for i in $(seq 1 4);do sed -i "s/8005/800$i/g;s/8080/808$i/g;s/8009/811$i/g" /usr/local/tomcat_v$i.jfedu.net/conf/server.xml ;done #将4个Tomcat实例server.xml文件中HTTP协议端口找出来; for i in $(find /usr/local/tomcat_v* -name server.xml);do grep -aiE "HTTP/1.1" $i ;done |grep -aiE "port="|awk -F\" '{print $2}'|sort -n|uniq #启动4个Tomcat服务进程; for m in $(seq 1 4);do /usr/local/tomcat_v$m.jfedu.net/bin/startup.sh ;sleep 5;done #查看Tomcat服务进程;
ps -ef|grep -aiE tomcat #查看4个Tomcat监听端口; netstat -tnlp|grep -aiwE "java" #Firewalld防火墙对外开放Tomcat HTTP协议端口; for port in $(for i in $(find /usr/local/tomcat_v* -name server.xml);do grep -aiE "HTTP/1.1" $i ;done |grep -aiE "port="|awk -F\" '{print $2}'|sort -n|uniq );do firewall-cmd --add-port=$port/tcp --permanent ;done ;firewall-cmd --reload ;firewall-cmd --list-all
根据如上Tomcat WEB集群实战,用户通过浏览器可以访问服务器IP地址+8081-8084,即可访问Tomcat测试页面,如图所示:
http://192.168.101.128:8081/
http://192.168.101.128:8082/
http://192.168.101.128:8083/
http://192.168.101.128:8084/
二、Nginx负载均衡、动静分离Tomcat集群
1)在企业生产环境中,Tomcat WEB集群不会直接放在网站最前端去提供访问,通常会引入负载调度器:LVS、Haproxy、Nginx,将Nginx和Tomcat集群整合形成一个完整的WEB架构,Nginx、Tomcat整合的意义:
负载均衡:
用户通过浏览器向Nginx发起Request请求,Nginx WEB会将请求转发(均衡分发、采用RR轮训方式)至后端4个Tomcat机器上,进而实现负载均衡,提高系统的性能。
反向代理:
用户通过浏览器向Nginx发起Request请求,Nginx WEB会将请求转发至后端Tomcat集群,后端Tomcat处理完成之后会将数据返回给Nginx,最终由Nginx返回给用户。
动静分离:
用户通过浏览器向Nginx发起Request请求,Nginx WEB检测到用户请求的静态网页,那么Nginx则直接处理。如果检测到用户请求的动态网页,Nginx是不能直接处理的,那么Nginx 会将动态网页请求转发至后端Tomcat去处理。
2)基于Nginx负载均衡、反向代理后端4个Tomcat WEB集群,修改nginx.conf配置文件添加upstream、proxy_pass参数,nginx.conf配置文件代码如下所示:
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream tomcat_web { server 192.168.101.128:8081 weight=100 max_fails=2 fail_timeout=15s; server 192.168.101.128:8082 weight=100 max_fails=2 fail_timeout=15s; server 192.168.101.128:8083 weight=100 max_fails=2 fail_timeout=15s; server 192.168.101.128:8084 weight=100 max_fails=2 fail_timeout=15s; } server { listen 80; server_name localhost; location / { proxy_pass http://tomcat_web; proxy_set_header host $host; root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
http://192.168.101.130/
3)基于Nginx负载均衡、反向代理、动静分离后端4个Tomcat WEB集群,修改nginx.conf配置文件添加upstream、proxy_pass参数,nginx.conf配置文件代码如下所示:
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream tomcat_web { server 192.168.101.128:8081 weight=100 max_fails=2 fail_timeout=15s; server 192.168.101.128:8082 weight=100 max_fails=2 fail_timeout=15s; server 192.168.101.128:8083 weight=100 max_fails=2 fail_timeout=15s; server 192.168.101.128:8084 weight=100 max_fails=2 fail_timeout=15s; } server { listen 80; server_name localhost; location / { proxy_pass http://tomcat_web; proxy_set_header host $host; root html; index index.html index.htm; } location ~ .*\.(htm|html|js|css|txt|jpg|jpeg|gif|png)$ { root html; expires 30d; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
未完待续。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)