Nginx+Tomcat负载均衡、动静分离,4层代理,7层代理
一:7层反向代理
Nginx 服务器:192.168.52.200:80
Tomcat服务器1:192.168.52.201:80
Tomcat服务器2:192.168.52.108:8080 192.168.52.108:8081
一.部署Nginx 负载均衡器
1.关闭防火墙
注意:所有的虚拟机都要注意关闭防火墙
systemctl stop firewalld
setenforce 0
2.下载编译依赖包
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
3.创建nginx用户
useradd -M -s /sbin/nologin nginx
4.编译安装
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \ #启用文件修改支持
--with-http_stub_status_module \ #启用状态统计
--with-http_gzip_static_module \ #启用 gzip静态压缩
--with-http_flv_module \ #启用 flv模块,提供对 flv 视频的伪流支持
--with-http_ssl_module #启用 SSL模块,提供SSL加密功能
--with-stream #启用 stream模块,提供4层调度
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-stream
make && make install
5.将nginx加入到service服务中
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service
二:部署2台Tomcat 应用服务器
tomcat1配置
1.关闭防火墙
systemctl stop firewalld
setenforce 0
2.解压jdk文件安装tomcat
tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
3.设置JDK环境变量
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
source /etc/profile
4.安装启动tomcat
tar zxvf apache-tomcat-8.5.16.tar.gz
mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.shnetstat -ntap | grep 8080
5.另一台tomcat2,配置为Tomcat多实例部署,详情见
tomcat多实例部署(文章第6点)
三:动静分离配置
动静分离原理:
服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发至后端
Nginx处理静态页面的效率远高于Tomcat的处理能力若Tomcat的请求量为1000次,则Nginx的请求量为6000次
Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M
Nginx处理静态资源的能力是Tomcat处理的6倍
动静分离应用:
- 动静分离,在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。
- 让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。
(1)Tomcat1 server 配置
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title> #指定为 test1 页面
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
</html>
vim /usr/local/tomcat/conf/server.xml
#由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true"></Context>
</Host>
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
(2)Tomcat2 server 配置
mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/test
vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title> #指定为 test2 页面
</head>
<body>
<% out.println("动态页面 2,http://www.test2.com");%>
</body>
</html>
vim /usr/local/tomcat/tomcat1/conf/server.xml
#删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />
</Host>
/usr/local/tomcat/tomcat1/bin/shutdown.sh
/usr/local/tomcat/tomcat1/bin/startup.sh
vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test3 page</title> #指定为 test3 页面
</head>
<body>
<% out.println("动态页面 3,http://www.test3.com");%>
</body>
</html>
vim /usr/local/tomcat/tomcat2/conf/server.xml
#删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/tomcat2/webapps/test" path="" reloadable="true" />
</Host>
/usr/local/tomcat/tomcat2/bin/shutdown.sh
/usr/local/tomcat/tomcat2/bin/startup.sh
四:Nginx server 配置
#准备静态页面和静态图片
echo '<html><body><h1>这是静态页面</h1></body></html>' > /usr/local/nginx/html/index.html
mkdir /usr/local/nginx/html/img
cp /root/game.jpg /usr/local/nginx/html/img
vim /usr/local/nginx/conf/nginx.conf
......
http {......#gzip on;#配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大upstream tomcat_server {server 192.168.52.201:8080 weight=1;server 192.168.52.108:8080 weight=1;server 192.168.52.108:8081 weight=1;}server {listen 80;server_name www.kgc.com;charset utf-8;#access_log logs/host.access.log main;#配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理location ~ .*\.jsp$ {proxy_pass http://tomcat_server;
#设置后端的Web服务器可以获取远程客户端的真实IP
##设定后端的Web服务器接收到的请求访问的主机名(域名或IP、端口),默认HOST的值为proxy_pass指令设置的主机名。如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来自反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。proxy_set_header HOST $host;
##把$remote_addr赋值给X-Real-IP,来获取源IPproxy_set_header X-Real-IP $remote_addr;
##在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}#配置Nginx处理静态图片请求location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {root /usr/local/nginx/html/img;expires 10d;}location / {root html;index index.html index.htm;}
......}:
......
}
4.测试效果
测试静态页面效果
浏览器访问 http://192.168.52.200/
浏览器访问 http://192.168.52.200/game.jpg
测试负载均衡效果,不断刷新浏览器测试,可以看到图片再3个画面切换
浏览器访问 http://192.168.52.200/test/index.jsp
二:4层反向代理
一:再配置一台额外的虚拟机的Nginx server 配置
四层代理的架构图:
二:Nginx 四层代理配置
./configure --with-stream #需要安装这个模块
和http同等级:所以一般只在http上面一段设置,
stream {upstream appserver {server 192.168.52.150:80 weight=1;server 192.168.52.200:80 weight=1;}server {listen 80;proxy_pass appserver;}
}http {......
三:注意点
1.所有7层反向代理nginx服务器的静态网页页面的路径要一致
2.轮循
weight=1的意思是轮循的优先级,数字越大,优先级越高,
- 循环的意思
此时的weight即权重都为1
- 加权轮询
此时的weight即权重不同
3.反向代理(Reverse Proxy)
服务器根据客户端的请求,从其关系的一组或多组后端服务器(如Web服务器)上获取资源,然后再将这些资源返回给客户端,客户端只会得知代理服务器的IP地址,而不知道在代理服务器后面的服务器集群的存在。
反向代理整个流程:由客户端发起对代理服务器的请求,代理服务器在中间将请求转发给某一个服务器,服务器将结果返回给代理服务器,代理服务器再将结果返回给客户端。
4.正向代理
当客户端主动使用代理服务器时,此时的代理叫正向代理。
正向代理时,由客户端发送对某一个目标服务器的请求,代理服务器在中间将请求转发给该目标服务器,目标服务器将结果返回给代理服务器,代理服务器再将结果返回给客户端。
使用正向代理时,客户端是需要配置代理服务的地址、端口、账号密码(如有)等才可使用的。
- 动静分离,在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。
- 让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。
5.负载均衡
负载均衡实际上是一种 网络技术,主要是基于现有的网络结构,增加吞吐量、加强网络数据处理能力、提高应用系统的灵活和可用性。利用Nginx可实现负载均衡,Nginx支持加权Round-Robin负载均衡算法,即加权轮询方式访问server指令指定的后端服务的功能。该功能是集成在Nginx的upstream框架中,指令中涉及多个参数,各个参数
- weight:服务访问的权重,默认是1
- max_conns:server的最大并发连接数,仅作用于单worker进程,默认是0,表示没有限制
- max_fails:在fail_timeout时间段内,最大的失败次数,当达到最大失败时,会在fail_timeout秒内这台server不允许再次被选择
- fail_timeout: 单位为妙,默认10秒
Nginx 负载均衡模式(调度算法):
rr 轮询round robin 负载均衡模式:
每个请求按时间顺序逐一分配到不同的后端服务器,如果超过了最大失败次数后(max_fails,默认1),在失效时间内(fail_timeout,默认10秒),该节点失效权重变为0,超过失效时间后,则恢复正常,或者全部节点都为down后,那么将所有节点都恢复为有效继续探测,一般来说rr可以根据权重来进行均匀分配。wrr 加权轮询weight round robin 指定weight来指定权重,数值越大,权重越高
least_conn 最少连接:
优先将客户端请求调度到当前连接最少的服务器。ip_hash 负载均衡模式:
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题,但是ip_hash会造成负载不均,有的服务请求接受多,有的服务请求接受少,所以不建议采用ip_hash模式,session 共享问题可用后端服务的 session 共享代替 nginx 的 ip_hash(使用后端服务器自身通过相关机制保持session同步)。fair(第三方)负载均衡模式:
按后端服务器的响应时间来分配请求,响应时间短的优先分配。url_hash(第三方)负载均衡模式:
基于用户请求的uri做hash。和ip_hash算法类似,是对每个请求按url的hash结果分配,使每个URL定向到同一个后端服务器,但是也会造成分配不均的问题,这种模式后端服务器为缓存时比较好。random 随机分配
●hash nginx的全局变量 consistent 一致性hash算法
hash $remote_addr consistent 一致性hash算法,客户端IP一致性哈希算法,是ip_hash算法的加强版
Nginx 调度算法在upstream模块中进行配置,处理rr和wr以外的模式,四层代理有些调度算法不支持
Nginx+Tomcat负载均衡、动静分离,4层代理,7层代理相关推荐
- ngixn+tomcat负载均衡 动静分离配置 (nginx反向代理)
文章目录 Tomcat主要配置文件 Nginx负载均衡实现原理 实验环境 动静分离配置 创建静态页面 配置动态页面 图片动静分离 Tomcat主要配置文件 bin:存放启动和关闭Tomcat脚本 co ...
- Nginx+Tomcat负载均衡、动静分离
目录 一:Nginx实现负载均衡原理 二:Nginx动静分离原理 三:Nginx+Tomcat负载均衡.动静分离实验 3.1部署Nginx负载均衡器 3.1.1关闭防火墙,将安装nginx所需的软件包 ...
- Nginx+Tomcat负载均衡、动静分离集群
Nginx+Tomcat负载均衡.动静分离集群 一.Nginx实现负载均衡原理 二.Nginx 配置反向代理的主要参数 三.Nginx 动静分离实现原理和优势 1.Nginx 静态处理优势 2.动静分 ...
- HAproxy负载均衡动静分离实现及配置详解
HAproxy负载均衡动静分离实现及配置详解 HAproxy的介绍 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAP ...
- Nginx+Tomcat 负载均衡集群方案
2019独角兽企业重金招聘Python工程师标准>>> Nginx+Tomcat 负载均衡集群方案 该方案是我之前做过的一个项目生产应用的,目前运行良好,如何您生产使用,请先做好测试 ...
- Nginx+Tomcat负载均衡
Nginx+Tomcat 负载均衡集群方案 该方案是我之前做过的一个项目生产应用的,目前运行良好,如何您生产使用,请先做好测试. 系统架构图 下载软件包 [root@Nginx-node1 src]# ...
- 搭建Nginx+Tomcat 负载均衡集群
Nginx+Tomcat 负载均衡集群 一. 实验拓扑: 二. 实验要求: 1. 试验环境: 主机 操作系统 所需软件 Nginx服务器 rhel 6.5 x86_64 nginx-1.6.0.tar ...
- ↑nginx+tomcat+httpd实现动静分离↑
↑nginx+tomcat+httpd实现动静分离↑ 2013-10-01 16:39:54 标签:tomcat动静分离 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本 ...
- Nginx+Tomcat负载均衡和动静分离理论实操详解来袭!
文章目录 一:关于动静分离和负载均衡介绍 1.1:Nginx+Tomcat的动静分离 1.2:Nginx+Tomcat的负载均衡 1.3:Nginx配置反向代理的主要参数 二:Nginx+Tomcat ...
- Nginx的动态代理,负载均衡,动静分离的简单使用
nginx 一 Nginx介绍 1.1 为什么要学习Nginx 问题1: 客户端到底要将请求发送那台服务器 问题2:所有客户端的请求都发送给了服务器1 问题3:客户端发送的请求可能是申请静态资源的,也 ...
最新文章
- NLLLoss CrossEntropyLoss Pytorch
- 2021年大数据常用语言Scala(二十二):函数式编程 映射 map
- Unity3D 镜面反射
- 容器部署不适合文件服务器,建议使用内置容器部署War文件与可执行jar
- java 获取进程_java获取指定进程的stat
- 世界坐标系,摄像机坐标系、图像坐标系关系汇总
- java map扩容机制_java中ConcurrentHashMap的扩容机制是怎样的?详细解析
- android listview高级,Android 高级控件笔记-列表视图ListView 基本适配器BaseAdapter
- react笔记-设计复合式控件(三)
- 宅在家里写数据库中DML(增删改)
- TDX抢反弹指标(不含未來函数)
- 一些关于虚拟交易的有趣文章
- 宝尚市场静候收官的市场又出现短期噪音
- 抗混叠滤波matlab实现,关于设计抗混叠滤波器的三大注意事项
- 逗号分隔 整形 数字 输入 读取方法 C++
- leetcode算法算题记录-数组--二分查找
- Windows 文件共享
- matlab中求分配系数的命令,汽车理论课后习Matlab程序.doc
- PageOffice如何控制在系统中打开Word文档只读
- 21年3月计算机一级真题及答案,2020年3月计算机二级选择题必考--1.21