目录:

一、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. 腾讯开源:Kotlin 高性能特效动画组件!

    先看一下效果展示: 1. VAP VAP(Video Animation Player)是企鹅电竞开发,用于播放酷炫动画的实现方案. 相比Webp, Apng动图方案,具有高压缩率(素材更小).硬件解 ...

  2. HDFS(Hadoop Distributed File System )概述

    目录 一.HDFS概述 二.HDFS特点 三.HDFS集群组成:主从架构---一个主节点,多个从节点 1. NameNode(名称节点 / 主节点)----- HDFS集群的管理者 2. DataNo ...

  3. gRPC学习之四:实战四类服务方法

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  4. 详细讲讲netty的pipiline!

    前言 提到 Netty 首当其冲被提起的肯定是支持它承受高并发的线程模型,说到线程模型就不得不提到 NioEventLoopGroup 这个线程池,接下来进入正题. 线程模型 首先来看一段 Netty ...

  5. Asp.Net Core 导入Excel数据到Sqlite数据库并重新导出到Excel

    Asp.Net Core 导入Excel数据到Sqlite数据库并重新导出到Excel 在博文"在Asp.Net Core 使用 Sqlite 数据库"中创建了ASP.NET Co ...

  6. 【原创】JavaFx程序解决Jupyter Notebook导出PDF不显示中文

    0.ATTENTION!!! JavaFx里是通过Java调用控制台执行的的jupyter和xelatex指令, 这些个指令需要在本地安装Jupyter和MikTeX之后才能正常在电脑上运行 1.[问 ...

  7. docker部署Redis6-0-6

    下载redis.conf配置 下载地址: http://download.redis.io/redis-stable/redis.conf 拉取docker镜像 docker pull redis:6 ...

  8. 依赖注入@Autowired@Primary@Quelifier使用

    @Autowired 注入声明的SpringBean对象,根据一定的规则首先按照注入的类型去查找,如果没有找到安装注入的名称去匹配你要注入的属性名称,如果都没有找到启动项目时抛出异常,@Autowir ...

  9. WPF中实现动画的几种效果(最基础方式)

    参考网址:https://blog.csdn.net/qq_45096273/article/details/106256397 在动画之前我们先了解一下几个声明式动画中常用的元素: 一.Storyb ...

  10. Spring boot集成Redis实现sessions共享时,sessions过期时间问题分析

    Springboot鼓励零配置的方式,帮你做好大部分重复劳动的事,好到不能再好:具体的Redis安装方法和Springboot集成Redis方法,可以去搜索相关文章或参考该文章http://www.c ...