在现代Web架构中,Nginx常作为反向代理服务器与Tomcat等应用服务器配合使用。以下是Nginx与Tomcat协同工作的处理流程及数据流向分析
Nginx基础处理流程
Nginx采用事件驱动的异步非阻塞架构,处理请求时主要分为以下阶段:
- 接收请求:通过监听端口接收客户端HTTP请求
- 请求解析:解析HTTP头部和URI
- 匹配location:根据配置文件中的规则匹配请求路径
- 代理转发:将动态请求转发至后端Tomcat服务器
- 响应返回:接收Tomcat响应并返回给客户端
典型的Nginx代理配置示例:
location /app {
proxy_pass http://tomcat_server:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
数据流向详解
客户端到Nginx
- 客户端发起HTTP请求到Nginx监听端口(默认80/443)
- Nginx接收完整请求头部后立即开始处理
- 静态资源(如CSS/JS)直接由Nginx返回
Nginx到Tomcat
- 动态请求根据
proxy_pass规则转发 - Nginx添加必要的代理头信息:
Host:保持原始请求域名X-Forwarded-For:记录客户端真实IP
- 通过负载均衡算法选择后端Tomcat实例(如配置了多节点)
Tomcat处理阶段
- 接收Nginx转发的请求
- Servlet容器处理请求生命周期:
- 过滤器链(FilterChain)执行
- Servlet的
service()方法调用 - 业务逻辑处理
- 生成响应内容及状态码
返回客户端路径
- Tomcat将响应返回Nginx
- Nginx可能进行以下处理:
- 响应缓冲(proxy_buffering)
- Gzip压缩
- 日志记录
- 最终通过Nginx将响应返回客户端
常见架构模式
-
动静分离:
- Nginx直接处理静态请求
- 仅动态请求转发Tomcat
-
负载均衡:
- 多个Tomcat实例的轮询/权重分发
- 健康检查机制
-
SSL终端:
- 在Nginx终止HTTPS连接
- 内网通信使用HTTP
tomcat
1、概念
动态任务处理的一个服务端
2、功能
提供java语言的运行环境,对前与nginx 进行协作完成动-静分离,对后-可以连接数据库,读/写数据记录。
3、环境准备
①关闭防火墙和核心防护
②上传软件包到指定位置,解压
4、配置tomcat
①配置JDK
vim /etc/profile
export JAVA_HOME=/usr/local1/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:{JAVA_HOME}/lib:{JRE_HOME}/lib
export PATH={JAVA_HOME}/bin:PATH
②重新加载配置
source /etc/profile
③查看是否安装开发环境
java -version
④启动tomcat
/usr/local/tomcat/bin/shutdown.sh # 关闭
/usr/local/tomcat/bin/startup.sh # 启动
⑤查看端口
netstat -ntap | grep 8080
5动静分离配置
①创建页面文件
cd /usr/local/tomcat/webapps mkdir test vi ./test/index.jsp
②修改Tomcat.conf的配置文件server.xml
vi /usr/local/tomcat/conf/server.xml
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
#在<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" > 中添加xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true"> </Context> #使Tomcat重启后识别/usr/local/tomcat/webapps/test目录下的网页文件 </Host>
③重启更新配置文件
cd /usr/local/tomcat/bin/ ./shutdown.sh ./startup.sh
④修改nginx配置文件
http{ upstream xu { #定义后端服务器地址池名称 server 192.168.164.134:8080;#Tomcat服务器对应端口为8080 server 192.168.164.133; } server { location / { proxy_pass http://xu; #代理到上面定义的upstream } } }