这是一个可能对您有用的社区
如果您有任何一对一沟通/面试手册/简历优化/求职相关问题,欢迎来到“御道快速发展平台”知识星球。以下是Planet 提供的一些信息。
《项目实战(视频)》:从书本中学习,从过去的事件中“实践”
《互联网高频面试题》:学习牢记简历,春暖花开
《架构 x 系统设计》:克服挑战,掌握高频面试场景题
《精进 Java 学习指南》:系统学习、主流互联网技术栈
《必读 Java 源码专栏》:找出它是什么以及为什么。
这是一个可能有用的开源项目
国内之星是一个超过10万的开源项目,前端包括管理后端+微信小程序,后端支持单体和微服务架构。
功能包括RBAC权限、SaaS多租户、数据权限、商城、支付、工作流程、大屏报表、微信公众号等等。
启动仓库:https://gitee.com/zhijiantianya/ruoyi-vue-pro
云仓库:https://gitee.com/zhijiantianya/yudao-cloud
视频教程:https://doc.iocoder.cn
【国内首批】支持JDK 21 + Spring Boot 3.2.2、JDK 8 + Spring Boot 2.7.18双版本
来源:juejin.cn/post/
7280088532377534505
不需要Nginx,只需要Tomcat的HTTP请求流程
Tomcat服务发布了怎么办
DNS 不能自动删除失败的IP 地址吗?
我可以手动删除有问题的IP 地址吗?
如果我的节点突然挂掉了怎么办?
Nginx 可以执行健康检查和失败重试
10个服务和10个Tomcat集群需要10个域名和30个公网IP吗?
Nginx 虚拟主机和反向代理
是否可以只使用Tomcat而不使用Nginx来构建Web服务?我曾经问过一个愚蠢的问题。今天我将详细解释为什么要使用Nginx。
不用Nginx,只用Tomcat的Http请求流程
当浏览器处理HTTP请求时,它首先通过DNS服务器查找与域名关联的IP地址,然后请求对应的IP地址。以阿里云域名管理服务为例,一个域名最多可以绑定三个IP地址。这三个IP地址必须是公网IP地址,因此您必须首先将Tomcat实例部署在三台公网IP服务器上。
此时您面临的问题是:
DNS域名管理绑定的IP地址有3个限制,所以如果你想把Tomcat扩展到4台机器,这是不支持的。无法满足扩展需求
如果您有10个服务对应10个Tomcat集群,则需要10 * 3个公共IP服务器。成本还是相当高的。
这10个服务必须对应10个域名,映射到相应的Tomcat集群。
10个域名我付不起这个钱(其实可以用二级域名配置DNS映射)
公网服务器作为接入层需要防火墙等安全管理,但如果有30台公网服务器,网络安全运维难度较大。
公网IP地址需另外向中国移动、中国联通运营商或云厂商购买。 30 个公共IP 地址并不便宜。
前后端分离意味着你不能再使用Tomcat作为静态文件服务器,只能使用Nginx或Apache。
上述挑战属于成本、安全、服务扩展等方面。
基于Spring Boot + MyBatis Plus + Vue Element +实现的后端管理系统,支持用户小程序、RBAC动态权限、多租户、数据权限、工作流、第三方登录、支付、短信、商城等功能
项目地址:https://github.com/YunaiV/ruoyi-vue-pro
视频教程:https://doc.iocoder.cn/video/
如果Tomcat服务发布怎么办
服务上线时Tomcat 不可用。对公共服务器的HTTP 请求将失败。 DNS最多可配置3台服务器,导致发布期间故障率为1/3。我的老板会用加特林射击我
DNS不能自动摘掉故障的IP地址吗?
不,DNS只负责解析域名对应的IP地址。不知道服务器上Tomcat的状态,更不知道对应服务器的状态。由于DNS只解析IP,不转发HTTP请求,因此无法知道哪些服务器的故障率较高。也不可能自动删除IP 地址。
我能手动下掉故障的IP地址吗?
这样做是可以的,但是还是有很多失败的请求。以阿里云为例,配置域名映射时,可以去掉对应的IP地址,但需要指定域名映射的缓存时间。默认值为10 分钟。这意味着,即使您在上线前删除了对应的IP,所有客户端也需要10分钟才能获得最新的DNS解析地址。
那么,我可以将TTL 缓存时间更改为较小的值吗?可以,但如果将其更改为较小的大小,则更多的请求将不得不从DNS 服务器获取最新的映射,这将减少总体请求时间的增加。降低用户体验。如果你的老板知道了,你会被骂的。
节点突然挂掉怎么办?
你可以在DNS管理后台手动删除IP地址,但是由于节点突然宕机或者Tomcat崩溃等原因,你可能没来得及删除对应的IP地址,问你的老板,我只好告诉他们。 “好的,请给我10分钟时间进行更改。”
此时,如果有软件可以检查Tomcat 集群的运行状况并重试失败,那就太好了。
巧合的是,这正是Nginx的强项。
基于Spring Cloud阿里巴巴+网关+Nacos+RocketMQ+VueElement+用户小程序实现的后端管理系统,RBAC动态权限、多租户、数据权限、工作流、第三方登录、支付、短信、商城等支持功能的
项目地址:https://github.com/YunaiV/yudao-cloud
视频教程:https://doc.iocoder.cn/video/
Nginx可以健康检查和故障重试
但Tomcat 的情况并非如此。
例如,如果您有两个Tomcat节点,请在Nginx中配置失败重试策略。
上游测试{
server127.0.0.1:8001fail_timeout=60smax_fails=2;#ServerA
server127.0.0.1:8002fail_timeout=60smax_fails=2;#ServerB
}
如果在节点A 上看到“连接被拒绝”(端口已关闭或服务器已关闭),则表示该服务因已释放或服务器已关闭而不可用。此时nginx自动将失败的请求转发给Node B。
假设第二次向A请求仍然失败,总共失败2次。然后,Nginx 自动将节点A 从活动列表中删除60 秒,然后继续将请求2 转发给节点B 进行处理。 60 秒后,尝试再次将请求转发到节点A.重复此循环,直到节点A 恢复正常.
在此过程中,客户端无法检测到故障。这是因为这两个请求都被转发了两次到节点B 并被成功处理。客户端不知道节点A处理失败。这就是Nginx反向代理的优点。也就是说,客户端不需要直接连接到服务器。如果服务器上的各个节点停止或释放,客户端不会受到影响。
Tomcat只是一个Java Web容器,不能做这些事情。
10个服务,10个Tomcat集群,就要10个域名,30个公网IP吗?
以阿里云为例,域名管理后端可以配置二级域名映射,这样一个公网域名可以拆分为10个二级域名。
因此,只使用Tomcat,而不使用Nginx。需要1个公网域名、10个二级域名、30台服务器、30个公网IP。
当我向老板提到这一点时,他说:“你疯了,滚出去,或者想出其他解决方案,想想它的价值,并用它来交换公共网络上的IP”吧。 ”。
Tomcat的DNS到IP地址的映射必须在公网,成本高昂。我感觉很痛苦。如果有软件可以将一个域名映射到30个内网IP就好了。
Nginx 恰好可以实现这一点。
Nginx 虚拟主机和反向代理
例如,将多个二级域名映射到不同的文件目录。
bbs.abc.com,映射到html/bbs
blog.abc.com 映射到html/blog
http{
包括mime.types;
默认类型应用程序/八位字节流;
发送文件。
keepalive_timeout65;
服务器{
听80;
服务器名称www.abc.com;
位置/{
根html/www;
索引index.htmlindex.htm;
}
}
服务器{
听80;
服务器名称bbs.abc.com;
位置/{
根html/bbs;
索引index.htmlindex.htm;
}
}
服务器{
听80;
服务器名称blog.abc.com;
位置/{
根html/博客;
索引index.htmlindex.htm;
}
}
}
例如,将不同的二级域名或URL路径映射到不同的Tomcat集群。
定义两个Tomcat集群,分别为serverGroup1和serverGroup2。
将group1 和group1 分别反向代理路径到serverGroup1 和serverGroup2。
uploadserverGroup1{#定义负载均衡设备的IP和状态
server192.168.225.100:8080;#默认权重值为1
server192.168.225.101:8082weight=2;#值越大负载权重越高
服务器192.168.225.102:8083;
server192.168.225.103:8084backup; #如果其他非备份服务器无法正常运行,该服务器将被认领。这称为热备份。
}
uploadserverGroup2{#定义负载均衡设备的IP和状态
server192.168.225.110:8080;#默认权重值为1
server192.168.225.111:8080weight=2;#值越大负载权重越高
服务器192.168.225.112:8080;
server192.168.225.113:8080backup;#仅当其他非备份服务器无法正常运行时才请求该服务器(称为热备份)。
}
服务器{#设置虚拟主机配置
Listen80;#监听端口
server_namepicture.itdragon.com;#监控地址,多个域名以空格分隔
location/group1{#默认请求后跟“/group1”表示启用反向代理。或者你也可以使用正则表达式
roothtml;#监听地址默认网站根目录位置
proxy_passhttp://serverGroup1;#代理转发
Indexindex.htmlindex.htm;#欢迎页面
Rejected127.0.0.1;#拒绝的IP
allowed192.168.225.133;#允许的IP
}
location/group2{#默认请求后跟“/group2”表示您要启用反向代理。或者你也可以使用正则表达式
roothtml;#监听地址默认网站根目录位置
proxy_passhttp://serverGroup2;#代理转发
Indexindex.htmlindex.htm;#欢迎页面
Rejected127.0.0.1;#拒绝的IP
allowed192.168.225.133;#允许的IP
}
error_page500502503504/50x.html;#定义错误提示页面
location=/50x.html{#配置错误提示页面
根html;
}
}
学习完上述课程后,您将需要Tomcat 和Nginx。
当然,你有足够的钱,无限的资源,无限的公网IP,无限的公网服务器,无限的域名,你就不能使用Nginx,服务发布了,你的网站崩溃了,你也无动于衷。
欢迎加入我的知识星球,全面提升你的技术能力。
参与请“长按”或“扫描”下方二维码。
Planet的内容包括真实的项目实践、面试招聘、源码分析、学习路线等。
如果文章有用,请阅读并转发。
非常感谢您的支持(*^_^*)
#上面是说有了Tomcat为什么还需要Nginx。相关内容来源网络仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91504.html