Nginx+Tomcat 负载均衡、动静分离集群
目录:
一、Nginx负载均衡实现原理
二、Nginx动静分离实现原理
一、Nginx负载均衡实现原理
1、Nginx实现负载均衡是通过反向代理实现
2、反向代理原理

3、Nginx 配置反向代理的主要参数
(1) upstream 服务池名 {}
配置后端服务器池,比提供相应数据
(2)proxy_pass http://服务池名
配置将访问请求转发给后端服务器池的服务器处理
二、Nginx动静分离实现原理
1、动静分离原理
服务端接收来自客户端的请求中。既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发至后端

2、Nginx 静态处理优势
- Nginx处理静态页面的效率远高于Tomcat的处理能力
- 若Tomcat的请求量为1000次,则Nginx的请求量为6000次
- Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M
- Nginx处理静态资源的能力是Tomcat处理的6倍
三、Nginx+Tomcat 负载均衡、动静分离集群部署
1、准备三台服务器,Nginx作为负载均衡器,Tomcat作为应用服务器
1 Nginx 服务器:192.168.116.100:80
2 Tomcat服务器1:192.168.116.70:8080
3 Tomcat服务器2:192.168.116.120:8080 192.168.116.120:8081
2、部署Nginx 负载均衡器
1 systemctl stop firewalld
2 setenforce 0
3
4 yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
5
6 useradd -M -s /sbin/nologin nginx



1 cd /opt
2 tar zxvf nginx-1.12.0.tar.gz -C /opt/
3
4 cd nginx-1.12.0/
5 ./configure \
6 --prefix=/usr/local/nginx \
7 --user=nginx \
8 --group=nginx \
9 --with-file-aio \ #启用文件修改支持
10 --with-http_stub_status_module \ #启用状态统计
11 --with-http_gzip_static_module \ #启用 gzip静态压缩
12 --with-http_flv_module \ #启用 flv模块,提供对 flv 视频的伪流支持
13 --with-http_ssl_module #启用 SSL模块,提供SSL加密功能
--with-stream #启用stream模块,开启四层调度
14 ----------------------------------------------------------------------------------------------------------
15 ./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


1 make && make install
2
3 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
4
5 vim /lib/systemd/system/nginx.service
6 [Unit]
7 Description=nginx
8 After=network.target
9 [Service]
10 Type=forking
11 PIDFile=/usr/local/nginx/logs/nginx.pid
12 ExecStart=/usr/local/nginx/sbin/nginx
13 ExecrReload=/bin/kill -s HUP $MAINPID
14 ExecrStop=/bin/kill -s QUIT $MAINPID
15 PrivateTmp=true
16 [Install]
17 WantedBy=multi-user.target
18
19 chmod 754 /lib/systemd/system/nginx.service
20 systemctl start nginx.service
21 systemctl enable nginx.service



3、部署2台Tomcat 应用服务器
Tomcat应用服务器1
1 systemctl stop firewalld
2 setenforce 0
3
4 tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
5
6 vim /etc/profile.d/java.sh
7 export JAVA_HOME=/usr/local/jdk1.8.0_91
8 export JRE_HOME=${JAVA_HOME}/jre
9 export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
10 export PATH=${JAVA_HOME}/bin:$PATH
11
12 source /etc/profile.d/java.sh





1 tar zxvf apache-tomcat-8.5.16.tar.gz
2
3 mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat
4
5 /usr/local/tomcat/bin/shutdown.sh
6 /usr/local/tomcat/bin/startup.sh
7
8 netstat -ntap | grep 8080


Tomcat应用服务器2
操作在上篇文章,传送门在此
https://www.cnblogs.com/aacoffee/p/15152228.html
4、动静分离配置
Tomca服务器1 配置
1 mkdir /usr/local/tomcat/webapps/test
2 vim /usr/local/tomcat/webapps/test/index.jsp
3 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
4 <html>
5 <head>
6 <title>JSP test1 page</title> #指定为 test1 页面
7 </head>
8 <body>
9 <% out.println("动态页面 1,http://www.test1.com");%>
10 </body>
11 </html>


1 vim /usr/local/tomcat/conf/server.xml
2 #由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置
3 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
4 <Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true">
5 </Context>
6 </Host>
7
8 /usr/local/tomcat/bin/shutdown.sh
9 /usr/local/tomcat/bin/startup.sh




Tomcat服务器2 配置(多实例)
Tomcat服务器2--第一实例配置
1 mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/test
2
3 vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
4 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
5 <html>
6 <head>
7 <title>JSP test2 page</title> #指定为 test2 页面
8 </head>
9 <body>
10 <% out.println("动态页面 2,http://www.test2.com");%>
11 </body>
12 </html>


1 vim /usr/local/tomcat/tomcat1/conf/server.xml
2 #删除前面的 HOST 配置
3 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
4 <Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true" />
5 </Host>
6
7 /usr/local/tomcat/tomcat1/bin/shutdown.sh
8 /usr/local/tomcat/tomcat1/bin/startup.sh


Tomcat服务器2--第二实例配置
1 vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp
2 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
3 <html>
4 <head>
5 <title>JSP test3 page</title> #指定为 test3 页面
6 </head>
7 <body>
8 <% out.println("动态页面 3,http://www.test3.com");%>
9 </body>
10 </html>

1 vim /usr/local/tomcat/tomcat2/conf/server.xml
2 #删除前面的 HOST 配置
3 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
4 <Context docBase="/usr/local/tomcat/tomcat2/webapps/test" path="" reloadable="true" />
5 </Host>
6
7 /usr/local/tomcat/tomcat2/bin/shutdown.sh
8 /usr/local/tomcat/tomcat2/bin/startup.sh


Nginx server 配置
1 #准备静态页面和静态图片
2 echo '<html><body><h1>这是静态页面</h1></body></html>' > /usr/local/nginx/html/index.html
3 mkdir /usr/local/nginx/html/img
4 cp /root/game.jpg /usr/local/nginx/html/img
5
6 vim /usr/local/nginx/conf/nginx.conf
7 ......
8 http {
9 ......
10 #gzip on;
11
12 #配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大
13 upstream tomcat_server {
14 server 192.168.116.70:8080 weight=1;
15 server 192.168.116.120:8080 weight=1;
16 server 192.168.116.120:8081 weight=1;
17 }
18
19 server {
20 listen 80;
21 server_name www.kgc.com;
22
23 charset utf-8;
24
25 #access_log logs/host.access.log main;
26
27 #配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理
28 location ~ .*\.jsp$ {
29 proxy_pass http://tomcat_server;
30 #设置后端的Web服务器可以获取远程客户端的真实IP
31 ##设定后端的Web服务器接收到的请求访问的主机名(域名或IP、端口),默认HOST的值为proxy_pass指令设置的主机名。如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来在反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。
32 proxy_set_header HOST $host;
33 ##把$remote_addr赋值给X-Real-IP,来获取源IP
34 proxy_set_header X-Real-IP $remote_addr;
35 ##在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来
36 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
37 }
38
39 #配置Nginx处理静态图片请求
40 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
41 root /usr/local/nginx/html/img;
42 expires 10d;
43 }
44
45 location / {
46 root html;
47 index index.html index.htm;
48 }
49 ......
50 }
51 ......
52 }


测试效果
1 测试静态页面效果
2 浏览器访问 http://192.168.116.100/
3 浏览器访问 http://192.168.116.100/game.jpg
4
5 测试负载均衡效果,不断刷新浏览器测试
6 浏览器访问 http://192.168.116.100/index.jsp





Nginx+Tomcat 负载均衡、动静分离集群的更多相关文章
- HAProxy+Varnish+LNMP实现高可用负载均衡动静分离集群部署
HAProxy高可用负载均衡集群部署 基本信息: 系统平台:VMware WorkStation 系统版本: CentOS Linux release 7.2.1511 (Core) 内核版本: 3. ...
- nginx+tomcat负载均衡+动静分离+redis集中管理session
1.服务器A安装ng,服务器B.C安装tomcat: 2.服务器A建立/data/www目录,用于发布静态文件: 3.ng无动静分离配置: user root root; worker_process ...
- 基于nginx的tomcat负载均衡和集群
要集群tomcat主要是解决SESSION共享的问题,因此我利用memcached来保存session,多台TOMCAT服务器即可共享SESSION了. 你可以自己写tomcat的扩展来保存SESSI ...
- Nginx+Tomcat负载均衡、动静分离群集
Nginx+Tomcat负载均衡.动静分离群集 目录 Nginx+Tomcat负载均衡.动静分离群集 一.Tomcat 1. Tomcat简介 2. Tomcat重要目录 二.Nginx负载均衡原理 ...
- 基于apache的tomcat负载均衡和集群配置
最近不是很忙,用零碎时间做点小小的实验. 以前公司采用F5负载均衡交换机,F5将请求转发给多台服务器,每台服务器有多个webserver实例,每个webserver分布在多台服务器,交叉式的分布集群. ...
- nginx+tomcat负载均衡
最近练习nginx+tomcat负载均衡.根据一些资料整理了大体思路,最终实现了1个nginx+2个tomcat负载均衡. 安装JDK 1>进入安装目录,给所有用户添加可执行的权限 #chmod ...
- linux+nginx+tomcat负载均衡,实现session同步
linux+nginx+tomcat负载均衡,实现session同步 花了一个上午的时间研究nginx+tomcat的负载均衡测试,集群环境搭建比较顺利,但是session同步的问题折腾了几个小时才搞 ...
- apache的tomcat负载均衡和集群配置 "
略看了一下,感觉太复杂,要配置的东西太多,因此在这里写出一种更简洁的方法. 要集群tomcat主要是解决SESSION共享的问题,因此我利用memcached来保存session,多台TOMCAT服务 ...
- Nginx + Tomcat 负载均衡配置详解
Nginx常用操作指南一.Nginx 与 Tomcat 安装.配置及优化1. 检查和安装依赖项 yum -y install gcc pcre pcre-devel zlib zlib-devel o ...
- 基于Apache的Tomcat负载均衡和集群(2)
反向代理负载均衡 (Apache+JK+Tomcat) 使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的.这种代理方式 ...
随机推荐
- 说说 VARCHAR 背后的那些事
在使用MySQL的过程中,在存储字符串时,大家或许都有过这样或那样的困惑,譬如: 1. 对于固定长度的字符串,为什么推荐使用 CHAR 来存储? 2. VARCHAR 可设置的最大长度是多少? 3 ...
- Vue2.x响应式原理
一.回顾Vue响应式用法 vue响应式,我们都很熟悉了.当我们修改vue中data对象中的属性时,页面中引用该属性的地方就会发生相应的改变.避免了我们再去操作dom,进行数据绑定. 二.Vue响应 ...
- [数据结构]ODT(珂朵莉树)实现及其应用,带图
[数据结构]ODT(珂朵莉树)实现及其应用,带图 本文只发布于博客园,其他地方若出现本文均是盗版 算法引入 需要一种这样的数据结构,需要支持区间的修改,区间不同值的分别操作. 一般的,我们会想到用线段 ...
- MySQL5.6忘记root密码
第一步 修改 /etc/my.conf 文件 添加 skip-grant-tables 到 [mysqld] 下面就可以 这个参数的意思是设置为无需密码验证的登录 登录之后,可以添加用户,可以修改密码 ...
- 【笔记】逻辑回归中使用多项式(sklearn)
在逻辑回归中使用多项式特征以及在sklearn中使用逻辑回归并添加多项式 在逻辑回归中使用多项式特征 在上面提到的直线划分中,很明显有个问题,当样本并没有很好地遵循直线划分(非线性分布)的时候,其预测 ...
- Rabbit-用户上线接收消息
application-dev.yml spring: rabbitmq: username: admin password: admin host: 192.168.0.45 port: 5672 ...
- 使用VSCode创建第一个VUE项目
vue init webpack vue_test回车,然后输入工程名称vue_test vue:Missing space before value for key 'components' 原因是 ...
- 【spring】spring 核心注解
注解具体分类如下: 1.模式注解 @Repository 数据仓储模式注解 @Component 通用组件模式注解 @Service ...
- canvas——动画实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Spring Boot +Vue 项目实战笔记(一):使用 CLI 搭建 Vue.js 项目
前言 从这篇文章开始,就进入真正的实践了. 在前端项目开发中,我们可以根据实际情况不同程度地使用 Vue.利用 Vue CLI(或写成 vue-cli,即 Vue 脚手架)搭建出来的项目,是最能体现 ...

