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

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

Tomcat 由一系列的组件构成,其中核心的组件有三个:

  • Web 容器:完成 Web 服务器的功能
  • Servlet 容器:名字为 catalina,用于处理 Servlet 代码
  • JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码

Nginx(解析静态资源)+Tomcat(解析动态JSP代码)

  • Nginx负载反向代理五种算法:轮询、ip_hash、weight、fair(第三方)、url_hash(第三方)

实验环境

一:tomcat安装(在192.168.10.102和192.168.10.103)

//关闭防火墙
[root@localhost ~]# systemctl stop firewalld        
[root@localhost ~]# setenforce 0
//安装java环境
[root@localhost ~]# yum -y install java        //yum 默认安装1.8版本的java(java-11)
[root@localhost ~]# java -version
//安装tomcat
[root@localhost ~]# tar zxvf apache-tomcat-9.0.8.tar.gz 
[root@localhost ~]# mv apache-tomcat-9.0.8 /usr/local/tomcat8
//创建测试网页
[root@localhost ~]# mkdir -p /web/webapp1
[root@localhost ~]# vim /web/webapp1/index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
<html>   
<head><title>JSP test1 page</title>
</head><body><% out.println("动态页面 1,http://www.test1.com");%></body> <body> <div>动态页面的图片 1</div><br><img src="logo.jpg"> </body> 
</html>

修改tomcat主配置文件

[root@localhost ~]# vim /usr/local/tomcat8/conf/server.xml <Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true"><Context docBase="/web/webapp1" path="" />        //修改此行,不需要虚拟目录<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /></Host>//重启tomcat
[root@localhost ~]# /usr/local/tomcat8/bin/shutdown.sh 
[root@localhost ~]# /usr/local/tomcat8/bin/startup.sh 

二:nginx配置(在192.168.10.101)

1:安装nginx

[root@localhost ~]# yum -y install pcre-devel zlib-devel gcc*
[root@localhost ~]# useradd -M -s /sbin/nologin nginx
[root@localhost ~]# tar zxvf nginx-1.12.0.tar.gz 
[root@localhost ~]# cd nginx-1.12.0
[root@localhost nginx-1.12.0]# yum -y install gcc* pcre-devel zlib-devel
[root@localhost nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
[root@localhost nginx-1.12.0]# make && make install[root@localhost nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

2:编辑测试网页文件

[root@localhost ~]# vim /usr/local/nginx/html/index.html 
<body> 
<h1>静态页面</h1> 
<p>这是个静态页面</p> 
</body>//添加图片
[root@nginx ~]# mkdir /usr/local/nginx/html/img                 //创建静态文件目录 
[root@nginx ~]# cp /root/logo.jpg /usr/local/nginx/html/img

3:修改主配置文件

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
(1)在http配置项中添加
upstream tomcat_server {    server 192.168.10.102:8080 weight=1;server 192.168.10.103:8080 weight=1;
}(2)在server配置项中添加
charset utf-8;    //添加
location / {root   html;index  index.html index.htm;
}location ~ .*\.jsp$ {proxy_set_header HOST $host;    //把原http请求中的Header中的Host字段放到转发的请求报文里,后端的web服务器利用这个host判断请求的是哪个虚拟主机proxy_set_header X-Real-IP $remote_addr;    //使用$remote_addr变量获得用户的真实ip,$remote_addr一般都是设置第一个代理上面。当一个请求通过多个代理服务器时,用户的IP将会被代理服务器IP覆盖proxy_set_header Client-IP $remote_addr;    //获取客户端ip地址proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    //从客户的真实ip为起点,穿过多层级的proxy ,最终到达web 服务器,都会记录下来。所以在获取用户真实ip的时候,最后一个nginx配置此变量,用来获取客户端的ip地址proxy_pass http://tomcat_server;
}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {root /usr/local/nginx/html/img;expires 30d;
}    

4:启动nginx并修改tomcat的配置文件,重启tomcat

[root@localhost ~]# nginx<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%a %r %t %{X-Real-IP}i" resolveHosts="false" />        //修改//在nginx配置文件中用X-Real-IP保存了客户端的真是IP地址,在tomcat中就需要将X-Real-IP解析出来,显示到tomcat的日志中

5:测试

浏览器打开网站
(1)静态网站测试
http://192.168.10.101(2)动态网站测试
http://192.168.10.101/index.jsp(3)查看tomcat的日志文件

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于HTML弹性布局做的支付宝界面
  • Mamba 永远不会忘记任何标记
  • 【iOS】OC关键字总结及底层原理(下)
  • 利用单张/多张图内参数标定 OpenCV Python
  • 大数据算法岗位分析推荐:基于Python的招聘大数据爬虫可视化分析推荐系统(完整系统源码+数据库+详细开发文档+万字论文+详细部署教程等全资料)
  • 数据结构-------队列
  • Dubbo框架实现RPC远程调用包括nacos的配置和初始化
  • 如何解决 windows11系统 使用中电脑突然自动休眠的问题
  • 使用消息队列、rocketMq实现通信
  • OpenAI 发布 GPT-4o 模型安全评估报告:风险等级为“中等”|TodayAI
  • C++——红黑树(图片+动图详解)
  • TCP Window Full TCP Zero Window
  • 【源码】Sharding-JDBC源码分析之Yaml分片配置文件解析原理
  • 【漏洞修复】Tomcat中间件漏洞
  • 强化学习之REINFORECE策略梯度算法——已CartPole环境为例
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • css属性的继承、初识值、计算值、当前值、应用值
  • iOS | NSProxy
  • JavaScript 基本功--面试宝典
  • Magento 1.x 中文订单打印乱码
  • Python爬虫--- 1.3 BS4库的解析器
  • SpringBoot 实战 (三) | 配置文件详解
  • Vue UI框架库开发介绍
  • vue-router的history模式发布配置
  • 后端_ThinkPHP5
  • 记一次用 NodeJs 实现模拟登录的思路
  • 那些被忽略的 JavaScript 数组方法细节
  • 你不可错过的前端面试题(一)
  • 判断客户端类型,Android,iOS,PC
  • 普通函数和构造函数的区别
  • 前嗅ForeSpider教程:创建模板
  • 如何在GitHub上创建个人博客
  • 通过npm或yarn自动生成vue组件
  • 学习JavaScript数据结构与算法 — 树
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 硬币翻转问题,区间操作
  • 2017年360最后一道编程题
  • 阿里云服务器购买完整流程
  • 函数计算新功能-----支持C#函数
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​如何防止网络攻击?
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • #知识分享#笔记#学习方法
  • (02)Unity使用在线AI大模型(调用Python)
  • (23)Linux的软硬连接
  • (7)摄像机和云台
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (二)正点原子I.MX6ULL u-boot移植
  • (分类)KNN算法- 参数调优
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (七)Java对象在Hibernate持久化层的状态