当前位置: 首页 > web >正文

Nginx +Tomcat架构的必要性与应用示例

一、Nginx +Tomcat整合的必要性

Nginx+Tomcat整合的必要性
Tomcat在高并发环境下处理动态请求时性能很低,而在处理静态页面更加脆弱。虽然Tomcat的最新版本支持epoll,但是通过Nginx来处理静态页面要比通过Tomcat处理在性能方面好很多。
Nginx可以通过如下两种方式来实现与Tomcat的耦合。
序号说明
1

【将静态页面请求交给Nginx,动态请求交给后端Tomcat处理】。

        即:请求来临之后,先全部到达Nginx服务器,Nginx服务器会对请求进行过滤(通过location实现判断请求URL的静态与动态):

《1》若判断请求时静态则Nginx服务器自己找到静态资源处理后直接返回给客户端;

《2》若判断请求时动态则Nginx服务器会把请求转发给Tomcat服务器,Tomcat服务器处理完成后将结果返回给Nginx,Nginx在返回给客户端。具体情况如下图所示:

2

【将所有请都交给后端的Tomcat服务器处理,同时利用Nginx自身的负载均衡功能,进行多台Tomcat服务器的负载均衡】。

        即:请求先到达Nginx服务器,Nginx服务器通过负载均衡策略将请求分发到后端的Tomcat服务器上,Tomcat服务器与数据库交互处理完成业务功能后返回结果给Nginx服务器,Nginx服务器再将结果返回给客户端。

《1》若想使Nginx与Tomcat的效率更高,可以将静态的资源放置在Nginx服务器中,直接让Nginx服务器处理返回给客户端;对于动态的资源内容通过Nginx的负载均衡策略传递给Tomcat处理后返回结果给Nginx服务器,Nginx服务器再将结果返回给客户端。.

《2》若访问量十分巨大(如每天有几百万、上千万的访问),首先要做的就是扩展Tomcat服务器;其次静态资源内容就不能只放在Nginx服务器上了,还需要将这些静态资源放到CDN中。

二、Nginx +Tomcat动静分离配置示例

 2.1、Nginx+Tomcat动静分离配置示例

#Nginx +Tomcat动静分离配置示例
server { listen 80; server_name www.ixdba.net; root /web/www/html;#这是Nginx处理的静态资源(即:url带/img/的请求都是到【/web/www/html/img/】路径下查找资源返回) location /img/ { alias /web/www/html/img/; }#这是Nginx将动态内容(以.jsp和.do结尾的文件都反向代理给后端的Tomcat处理,且配置了一些反向代理的优化配置)location ~ (\.jsp)|(\.do)$ { proxy_pass http://192.168.1.16:8080; proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;client_max_body_size 10m;client_body_buffer_size 128k;proxy_connect_timeout 90;proxy_send_timeout 90;proxy_read_timeout 90;proxy_buffer_size 4k;proxy_buffers 4 32k;proxy_busy_buffers_size 64k;proxy_temp_file_write_size 64k;} 
} 

 2.2、root与alias的区别

root与alias的区别

alias指令和root指令的区别是:

《1》【alias指定的目录是当前目录】;

《2》【root指定的是根目录】;

一般况下,建议在【location  / 】中通过【root指令来配置根目录】,而在【其它目录匹配的位置使用alias指令】。

序号说明
1

location  /i {	                     # www.a.com/i/123.gifroot  /var/www/html/images/;   #/var/www/html/images/i/123.gif
}

这个location段配置中,如果url请求【/i/logo.gif】,那么Nginx将会在服务器上查找【/var/www/html/images/i/logo.gif】文件。

2
location  /i {   					  #www.a.com/i/123.gifalias  /var/www/html/images/;   #/var/www/html/images/123.gif
}

在这个location段配置中,如果url请求【/i/logo.gif】,那么Nginx将会在服务器上查找【/var/www/html/images/logo.gif】文件,也就是说请求的url中location后面的部分会被追加到alias指定的目录后面,而location后面的【 /i 】路径将被自动丢弃。

三、Nginx +Tomcat多tomcat负载均衡配置示例

        假设有三台Tomcat服务器,分别开放不同的端口,地址分别是:
【主机192.168.12.131开放8000端口】【主机192.168.12.132开放8080端口】【主机192.168.12.133开放8090端口】对应的Nginx配置文件中相关配置代码如下:

#Nginx+Tomcat负载均衡配置示例
http {include       mime.types;default_type  application/octet-stream;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  logs/access.log  main;sendfile        on;tcp_nopush     on;tcp_nodelay    on;#keepalive_timeout  0;keepalive_timeout  65;server_names_hash_bucket_size 128;client_max_body_size 20m;client_header_buffer_size 32k;large_client_header_buffers 4 32k;gzip  on;gzip_min_length 1k;gzip_buffers    4    16k;gzip_http_version 1.1;gzip_comp_level 2;gzip_types text/plain application/x-javascript text/css application/xml;gzip_vary on;upstream  mytomcats { server 192.168.1.131:8000 max_fails=3 fail_timeout=20s; server 192.168.1.132:8080 max_fails=3 fail_timeout=20s;server 192.168.1.133:8090 max_fails=3 fail_timeout=20s;ip_hash;} server { listen 80; server_name www.ck.net; access_log logs/ck.access.log main;#当客户端请求的是以(.jpg .gif .png .swf .flv .wma .wmv .asf .mp3 .mmf .zip .rar)结尾的这类静态资源文件时,Nginx直接从Nginx服务器本机的【/web/www.html/】路径下查找返回给客户端location ~* \.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ { root /web/www/html/; }#当客户端的请求处理上面提到的静态资源外全部都走这个反向代理到后端的Tomcat进行处理,Tomcat处理完成后将结果返回给Nginx服务器,Nginx服务器再将结果返回给客户端location / {proxy_pass http://mytomcats; include    /usr/local/nginx/conf/proxy.conf;} } 
#这是【/usr/local/nginx/conf/proxy.conf】文件的内容
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
http://www.xdnf.cn/news/20312.html

相关文章:

  • Kafka 消息队列:揭秘海量数据流动的技术心脏
  • 具身智能多模态感知与场景理解:融合语言模型的多模态大模型
  • 【关系型数据库SQL】MySql数据库基础学习(一)
  • 高级RAG策略学习(五)——llama_index实现上下文窗口增强检索RAG
  • 在本地使用Node.js和Express框架来连接和操作远程数据库
  • 从“找新家”到“走向全球”,布尔云携手涂鸦智能开启机器人新冒险
  • 突发奇想,还未实践,在Vben5的Antd模式下,将表单从「JS 配置化」改写成「模板可视化」形式(豆包版)
  • langchain 提示模版 PromptTemplate
  • Coze源码分析-资源库-编辑提示词-后端源码
  • 苹果TF签名全称TestFlight签名,需要怎么做才可以上架呢?
  • 如何选择靠谱的软文推广平台?这份行业TOP5清单请查收~
  • AGENTS.md: AI编码代理的开放标准
  • RL【3】:Bellman Optimality Equation
  • 支付DDD建模
  • [光学原理与应用-409]:设计 - 深紫外皮秒脉冲激光器 - 元件 - 窗口镜设计:高透射率、抗损伤与精密调控的终极方案
  • 容器镜像全生命周期管理:从Artifactory制品库搭建到构建节点高效运维
  • Go语言实现以太坊Web3开发
  • 【LeetCode 热题 100】1. 两数之和——(解法二)哈希表
  • 使用tensorRT8部署yolov8/11目标检测模型(1)
  • 无密码登录与设备信任:ABP + WebAuthn/FIDO2
  • IPD模式下跨部门团队管理
  • 力扣152:乘积最大子数组
  • 智慧养老综合实训室建设方案:依托教育革新提升养老人才科技应用能力
  • nestjs 缓存配置及防抖拦截器
  • C# 阿里云 OSS 图片上传步骤及浏览器查看方法
  • 深入解析汇编语言的奥秘
  • 文件不展示Eslint的报错红色
  • 前端三件套+springboot后端连通尝试
  • 系统学习算法 专题十八 队列+宽搜
  • Doris 数据仓库例子