目录:

一、Nginx负载均衡实现原理

二、Nginx动静分离实现原理

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

一、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 负载均衡、动静分离集群的更多相关文章

  1. HAProxy+Varnish+LNMP实现高可用负载均衡动静分离集群部署

    HAProxy高可用负载均衡集群部署 基本信息: 系统平台:VMware WorkStation 系统版本: CentOS Linux release 7.2.1511 (Core) 内核版本: 3. ...

  2. nginx+tomcat负载均衡+动静分离+redis集中管理session

    1.服务器A安装ng,服务器B.C安装tomcat: 2.服务器A建立/data/www目录,用于发布静态文件: 3.ng无动静分离配置: user root root; worker_process ...

  3. 基于nginx的tomcat负载均衡和集群

    要集群tomcat主要是解决SESSION共享的问题,因此我利用memcached来保存session,多台TOMCAT服务器即可共享SESSION了. 你可以自己写tomcat的扩展来保存SESSI ...

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

    Nginx+Tomcat负载均衡.动静分离群集 目录 Nginx+Tomcat负载均衡.动静分离群集 一.Tomcat 1. Tomcat简介 2. Tomcat重要目录 二.Nginx负载均衡原理 ...

  5. 基于apache的tomcat负载均衡和集群配置

    最近不是很忙,用零碎时间做点小小的实验. 以前公司采用F5负载均衡交换机,F5将请求转发给多台服务器,每台服务器有多个webserver实例,每个webserver分布在多台服务器,交叉式的分布集群. ...

  6. nginx+tomcat负载均衡

    最近练习nginx+tomcat负载均衡.根据一些资料整理了大体思路,最终实现了1个nginx+2个tomcat负载均衡. 安装JDK 1>进入安装目录,给所有用户添加可执行的权限 #chmod ...

  7. linux+nginx+tomcat负载均衡,实现session同步

    linux+nginx+tomcat负载均衡,实现session同步 花了一个上午的时间研究nginx+tomcat的负载均衡测试,集群环境搭建比较顺利,但是session同步的问题折腾了几个小时才搞 ...

  8. apache的tomcat负载均衡和集群配置 "

    略看了一下,感觉太复杂,要配置的东西太多,因此在这里写出一种更简洁的方法. 要集群tomcat主要是解决SESSION共享的问题,因此我利用memcached来保存session,多台TOMCAT服务 ...

  9. Nginx + Tomcat 负载均衡配置详解

    Nginx常用操作指南一.Nginx 与 Tomcat 安装.配置及优化1. 检查和安装依赖项 yum -y install gcc pcre pcre-devel zlib zlib-devel o ...

  10. 基于Apache的Tomcat负载均衡和集群(2)

    反向代理负载均衡 (Apache+JK+Tomcat) 使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的.这种代理方式 ...

随机推荐

  1. CSS样式逐li添加,执行完,清空,反复执行

    function change_light(el) { el.hide() let i = 0; function temp() { if (i > el.length - 1) { el.hi ...

  2. 面试官:MySQL 有哪些锁??

    大家好,我是小林. 这次,来说说 MySQL 的锁,主要是 Q&A 的形式,看起来会比较轻松. 不多 BB 了,发车! 在 MySQL 里,根据加锁的范围,可以分为全局锁.表级锁和行锁三类. ...

  3. 十分钟带你了解CANN应用开发全流程

    摘要:CANN作为昇腾AI处理器的发动机,支持业界多种主流的AI框架,包括MindSpore.TensorFlow.Pytorch.Caffe等,并提供1200多个基础算子. 2021年7月8日,第四 ...

  4. Windows Go 开发环境下载、安装并配置

    前言 对于我们Windows用户而言,Go提供两种环境安装方式(源码安装除外): 1.MSI安装(MSI文件是Windows Installer的数据包,它实际上是一个数据库,包含安装一种产品所需要的 ...

  5. SQL 练习9

    查询学过「张三」老师授课的同学的信息 SELECT Student.* from Student,Teacher,Course,SC WHERE Teacher.TId = Course.TId AN ...

  6. 从零开始实现简单 RPC 框架 4:注册中心

    RPC 中服务消费端(Consumer) 需要请求服务提供方(Provider)的接口,必须要知道 Provider 的地址才能请求到. 那么,Consumer 要从哪里获取 Provider 的地址 ...

  7. Java社区——个人项目开发笔记(一)

    1.maven安装与测试 安装过程略,常用的maven命令行工具: mvn --version 查看maven版本 mvn compile 编译maven工程 mvn clean 删除编译文件 mvn ...

  8. Docker运行PostgreSQL

    docker-compose.yml version: '3.1' services: db: image: postgres restart: always ports: - 5432:5432 e ...

  9. 数据结构解析-HashTable

    概要 HashTable也是散列表的一种实现,我们在上一篇解析了HashMap,在这里我们与HashMap做个对比,让你能清晰的了解两者的区别: 散列表 实现方式 数据安全 数据安全实现方式 key\ ...

  10. (二)js基础。。。freecodecamp笔记

    个人需要注意的点 当 JavaScript 中的变量被声明的时候,程序内部会给它一个初始值undefined.当你对一个值为undefined的变量进行运算操作的时候,算出来的结果将会是NaN,NaN ...