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

Tomcat简介

Tomcat 是由 Apache 软件基金会(ASF)开发的一款开源的 Servlet 容器 和 Web 服务器,主要用于运行基于 Java 的 Web 应用程序(如 JSP、Servlet)。它实现了 Java Servlet、JavaServer Pages(JSP)、Java Expression Language(EL)和 WebSocket 等 Java EE 规范,是轻量级、高性能的 Java Web 应用服务器,广泛应用于开发和生产环境。

Tomcat 的核心功能

Servlet 容器

解析和执行 Java Servlet 代码,处理 HTTP 请求和响应。

管理 Servlet 的生命周期(初始化、服务、销毁)。

JSP 引擎

将 JSP 文件动态编译为 Servlet,生成 HTML 响应。

静态资源服务

支持直接提供 HTML、CSS、JavaScript、图片等静态文件。

会话管理

提供 HttpSession 接口,支持用户会话跟踪。

安全与认证

支持基于角色的访问控制(RBAC)、SSL/TLS 加密等。

集群与负载均衡

通过插件支持多节点部署,实现高可用性。

Tomcat架构

Tomcat 采用模块化设计,主要组件包括:

组件 作用

Server 顶层容器,代表整个 Tomcat 实例。

Service 连接 Connector 和 Engine,提供服务(如 HTTP、AJP)。

Connector 处理客户端连接(如 HTTP 请求),将请求转发给 Engine。

Engine 处理请求的核心组件,管理多个 Host(虚拟主机)。

Host 虚拟主机,如 localhost,管理多个 Context(Web 应用)。

Context 单个 Web 应用(如 /myapp),对应一个 WAR 文件或目录。

Tomcat 的特点

轻量级

相比 WebLogic、WebSphere 等商业服务器,Tomcat 体积小、启动快。

开源免费

遵循 Apache 许可证,无商业使用限制。

跨平台

支持 Windows、Linux、macOS 等操作系统。

易于集成

可与 Spring Boot、Struts 等框架无缝集成。

社区活跃

长期维护,版本更新频繁,支持最新 Java 特性

Tomact配置

关闭防火墙及系统内核

root@localhost \~\]# systemctl stop firewalld #关闭防火墙 \[root@localhost \~\]# setenforce 0 #关闭系统内核 在安装Tomcat之前需要安装Tomcat依赖环境 \[root@localhost \~\]# dnf -y install java 将Tomcat的安装包压缩(压缩就能用 绿色安装) \[root@localhost \~\]# tar zxf apache-tomcat-9.0.8.tar.gz 移动至别的目录并重置名字 \[root@localhost \~\]# mv apache-tomcat-9.0.8 /usr/local/tomcat Tomcar 主要文件信息 bin/:存放 Windows 或 Linux 平台上启动和关闭 Tomcat 的脚本文件。 conf/: 存放 Tomcat 服务器的各种全局配置文件,其中最重要的是 server.xml 和web. xml. lib/:存放 Tomcat 运行需要的库文件(JARS) -logs:存放 Tomcat 执行时的 LOG 文件 -webapps:Tomcat 的主要 Web 发布目录(包括应用程序示例) work:存放 JSP 编译后产生的 class 文件。 配置文件说明 catalina.policy:权限控制配置文件。 catalina.properties:Tomcat 属性配置文件。 context.xml:上下文配置文件。 logging.properties: 日志 log 相关配置文件。 server.xml:主配置文件。 tomcat-users.xml:manager-gui管理用户配置文件(Tomcat 安装后提供-个 manager-gui 的管理界面,通过配置该文件可以开启访问)。 web.xml:Tomcat 的 servlet、servlet-mapping、filter、MIME 等相关配置。 启动Tomcat \[root@localhost \~\]# /usr/local/tomcat/bin/startup.sh #启动 \[root@localhost \~\]# /usr/local/tomcat/bin/shutdown.sh #关闭 检测是否运行 \[root@localhost \~\]# netstat -anpt \|grep java tcp6 0 0 127.0.0.1:8005 ::😗 LISTEN 2387/java tcp6 0 0 :::8080 ::😗 LISTEN 2387/java tcp6 0 0 :::8009 ::😗 LISTEN 2387/java 验证测试网页 ![img](https://i-blog.csdnimg.cn/direct/d8d6ad9ae6184636a2ae8ff0d14e6c2b.png) 案例一:Java的Web站点 关闭防火墙及系统内核 \[root@localhost webapp1\]# systemctl stop firewalld \[root@localhost webapp1\]# setenforce 0 在安装Tomcat之前需要安装Tomcat依赖环境 \[root@localhost \~\]# dnf -y install java 将Tomcat的安装包压缩(压缩就能用 绿色安装) \[root@localhost \~\]# tar zxf apache-tomcat-9.0.8.tar.gz 移动至别的目录并重置名字 \[root@localhost \~\]# mv apache-tomcat-9.0.8 /usr/local/tomcat 创建测试页面区分两个网站 ```shell [root@localhost bin]# mkdir -p /web/webapp1 [root@localhost bin]# cd /web/webapp1/ [root@localhost bin]# vim index.jsp 02 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> JSP test1 page <% out.println("动态页面 1,http://www.test1.com");%>

动态页面的图片 1

两个网站 03 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> JSP test2 page <% out.println("动态页面 2,http://www.test2.com");%>
动态页面的图片 2

``` 修改Tomcat配置文件 ```shell [root@localhost ~]# vim /usr/local/tomcat/conf/server.xml 忽略以上所有信息 148行 #只添加这一行 关闭Tomcat在启动 ``` ```shell [root@localhost ~]# /usr/local/tomcat/bin/startup.sh #启动 [root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh #关闭 ``` 102验证 ![img](https://i-blog.csdnimg.cn/direct/36d79fa114dd47d698554aee1f68a6c1.png) 103验证 ![img](https://i-blog.csdnimg.cn/direct/c4eb978c4db94108abb608ccad92b573.png) #### 案例二:Nginx+Tomcat负载均衡、动静分离 跟案例一操作基本上是一样的,只是配置不一样 这里不再演示如何安装Nginx 101Nginx 102Tomcat1 103Tomcat2 修改Nginx配置文件 ```shell 忽略以上信息 添加真实服务器的ip、端口、权重 #gzip on; upstream my_tomcat{ server 192.168.10.102:8080 weight=1; server 192.168.10.103:8080 weight=2; } 忽略以下信息 server { listen 80; server_name localhost; charset utf-8; #在server中开启utf-8,要不然会乱码 #access_log logs/host.access.log main; 在location下写我们自己的location location ~ .*\.jsp$ { proxy_set_header HOST $host; #proxy_set_header Client-IP $remote_addr; #这三条是之后,查看日志信息的时候查看真实IP访问Tomcat服务器的 #proxy_set_header X-Real-IP $remote_addr; #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://my_tomcat; } location ~ .*\.(gif|jpg|png)$ { root /usr/local/nginx/html/img; expires 30d; } ``` 配置完后 检查配置是否有误 ```shell [root@localhost ~]# nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful ``` 重启 ```shell [root@localhost img]# systemctl restart nginx ``` !\[img\](https://i-blog.csdnimg.cn/direct/f2797d45dce648829303fe949d6dcca4.png 后续查看日志并不能看到真实的ip访问Tomcat ![img](https://i-blog.csdnimg.cn/direct/00f8662740de4503a524576a5ec22960.png) 需要给上面的配置#号去掉 ```shell 忽略以上信息 添加真实服务器的ip、端口、权重 #gzip on; upstream my_tomcat{ server 192.168.10.102:8080 weight=1; server 192.168.10.103:8080 weight=2; } 忽略以下信息 server { listen 80; server_name localhost; charset utf-8; #在server中开启utf-8,要不然会乱码 #access_log logs/host.access.log main; 在location下写我们自己的location location ~ .*\.jsp$ { proxy_set_header HOST $host; proxy_set_header Client-IP $remote_addr; #这三条是之后,查看日志信息的时候查看真实IP访问Tomcat服务器的 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://my_tomcat; } location ~ .*\.(gif|jpg|png)$ { root /usr/local/nginx/html/img; expires 30d; } ``` 配置完后 检查配置是否有误 [root@localhost ~]# nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful 重启 ```shell [root@localhost img]# systemctl restart nginx 修改Tomcat文件 [root@localhost ~]# vim /usr/local/tomcat/conf/server.xml #只有%{X-Real-IP}i 需要添加 访问nginx刷新并查看Tomcat日志信息 ``` ![img](https://i-blog.csdnimg.cn/direct/75c3e049d9c84f3b810f86ae510cf1af.png)

相关推荐
笨手笨脚の1 小时前
Nginx-4 Nginx 的7层反向代理
运维·nginx·php
七灵微5 小时前
【后端】负载均衡
运维·负载均衡
过期动态7 小时前
MySQL中的常见运算符
java·数据库·spring boot·mysql·spring cloud·kafka·tomcat
武子康10 小时前
Java-51 深入浅出 Tomcat 手写 Tomcat 类加载机制 双亲委派机制 生命周期 插件化
java·开发语言·spring boot·后端·spring·tomcat·springcloud
孙克旭_10 小时前
day039-nginx配置补充
linux·运维·nginx
51714 小时前
通过Docker挂载nginx并修改页面
nginx·docker·容器
19778354617 小时前
Nginx+Tomcat负载均衡群集_扫描版
nginx·tomcat·负载均衡
苹果醋320 小时前
vuex4.0用法
java·运维·spring boot·mysql·nginx
大数据张老师1 天前
服务发现与动态负载均衡的结合
运维·服务发现·负载均衡