目录:

一、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. squid异常停止的排查步骤

    今天重启squid的时候发现,squid启动后,status 一会就stop了 whoami@blackman:~/script/AutoProxy-master/main/server$ sudo ...

  2. Java面向对象13——抽象类

    抽象类  package oop.demon01.demon08; ​ //abstract 抽象类: 类 extends: 类---单继承   (接口可以多继承) public abstract c ...

  3. 95后新同事年薪35W+,老员工却“自愿申请”降薪10%,中年职场人正在崩溃

    蔡依林在演唱会上说过的一句话:"在乐坛摸爬滚打这么多年,遭遇了那么多质疑和嘲讽还能挺立到今天,然后想说40岁是个很棒的年纪......",让很多在职场打拼多年的老员工感慨颇深. 真 ...

  4. [SQL]数据更新

    插入数据 插入单个元组 一般格式: insert into <表名> [<列名1>, <列明2>, --] -- 指出在表中新插入的值的列, values(< ...

  5. mysql《一》

    一.启动和停止服务器 通过管理员权限打开cmd命令指示符 通过 net stop mysql(自己的服务器名字)  停止服务器 通过 net start mysql(自己的服务器名字)  启动服务器 ...

  6. 用SamInside破解Windows登录密码

    用小马PE的USB-HDD+格式制作启动优盘: 笔记本启动时按ESC键,选择USB启动: 进入WinPE后,将%SystemRoot%/system32/config全部拷贝出来(WinXP这个文件夹 ...

  7. 计算机专业学了快一年, 只会一点C语言,你好意思说自己是IT专业的?

    目录 一.C/C++入门阶段 学习视频推荐:C++入门基础[B站 小甲鱼] 二.C/C++开发进阶 学习视频推荐:C++进阶[慕课网 免费课] 三.C++开发高级 视频教程:程序设计[中国大学MOOC ...

  8. JavaScript学习07(jQuery)

    jQuery 什么是JQuery jQuery 由 John Resig 于 2006 年创建.它旨在处理浏览器不兼容性并简化 HTML DOM 操作.事件处理.动画和 Ajax. 十多年来,jQue ...

  9. RPM包方式安装Oracle21c的方法

    RPM包方式安装Oracle21c的方法 前言 北京时间2021.8.14 Oracle发布了最新的数据库版本Oracle21c, Oracle规划不再发布Oracle20c和Oracle22c, 直 ...

  10. 生成树-RSTP基础配置

    实验内容: 一.实验拓扑: 二.实验编址: 三.实验步骤: 1. 基本IP配置 2.启动设备 3.测试连通性 4.配置RSTP基本功能: 华为交换机默认开启了MSTP生成树模式,所以我们修改生成树模式 ...