Nginx 负载均衡和动静分离

  • Nginx 动静分离 处理优势
    1、Nginx处理静态页面的效率远高于Tomcat的处理能力
    2、若Tomcat的请求量为1000次,则Nginx的请求量为6000次
    3、Tomcat每秒的吞吐量为0.6M,则Nginx的每秒吞吐量为3.6M
    4、Nginx处理静态资源的能力是Tomcat处理能力的6倍

应用场景

  • 通常情况下,一台 Tomcat 站点由于可能出现单点故障及无法应付过多客户复杂多样的 请求等问题,不能单独应用于生产环境下,所以需要一套更可靠的解决方案来完善 Web 站点 架构。
  • Nginx 是一个非常强大的静态 web 服务,Tomcat 处理动态请求效率不高,而一般网站大
    多数的内容都是静态文件(如图片、html、css、js 等),经过 Nginx 前端的反向代理加速 和过滤,后端 Tomcat 处理请求的压力便可大大减少,只需负责处理动态内容就可以了。在 性能与稳定性的权衡下,使用 Nginx+Tomcat 搭配便可让它们在各自擅长的领域大展拳脚

部署 Nginx + Tomcat 群集

1台 Nginx 调度器(ip:20.0.0.21/24

软件安装包:nginx-1.15.9.ta
一张照片)

1台 Tomcat 1服务器(ip:20.0.0.22/24

软件安装包:apache-tomcat-8.5.23.tar
jdk-8u 144-linux-x64.tar)

1台 Tomcat2 服务器(ip:20.0.0.23/24

软件安装包:apache-tomcat-8.5.23.tar
jdk-8u 144-linux-x64.tar)

  • 所有服务器关闭防火墙、核心防护,安装本地yum源
配置 Tomcat 1 节点服务器(20.0.0.22) Tomcat 2 节点服务器(20.0.0.23)

在安装 Tomcat 之前必须先安装 JDK
安装 JDK 部分:
1、将安装包 apache-tomcat-8.5.23.tar 和 jdk-8u 144-linux-x64.tar 上传至 /opt 目录下

[root@localhost ~]# java -version
-bash: java: command not found                 ####报错,则没有安装 java    [root@localhost ~]# cd /opt
[root@localhost opt]# tar xzvf jdk-8u144-linux-x64.tar.gz   [root@localhost opt]# cp -rv jdk1.8.0_144/ /usr/local/java
[root@localhost opt]# vi /etc/profile  #######在文件末尾添加以下四行
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export PATH=$PATH:/usr/local/java/bin
export CLASSPATH=./:/usr/local/java/lib:/usr/local/java/jre/lib[root@localhost opt]# source /etc/profile
[root@localhost opt]# java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
12345678910111213141516171819

安装 Tomcat 部分:

[root@localhost opt]# tar zxvf apache-tomcat-8.5.23.tar.gz
[root@localhost opt]# mv apache-tomcat-8.5.23 /usr/local/tomcat1
[root@localhost opt]# ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
[root@localhost opt]# ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown
[root@localhost opt]# tomcatup                               ####启动
Using CATALINA_BASE:   /usr/local/tomcat8
Using CATALINA_HOME:   /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME:        /usr/local/java/jre
Using CLASSPATH:           /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.
[root@localhost opt]# yum -y install net-tools                 ####安装工具包
[root@localhost opt]# netstat -anpt | grep 8080                   #####检测是否启动,8080端口是否工作正常


4、在真机上测试是否工作正常
网页输入: 20.0.0.22:8080出现tomcat页面

编辑测试页面

[root@localhost ~]# mkdir -pv /web/webapp1

在webapp1 目录下建立一个 index.jsp 的测试页面

[root@localhost ~]# vi /web/webapp1/index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head><title>程序员</title>
</head>
<body> <% out.println("聪明绝顶,http://www.51xit.com");%>
</body>
<body><div>金刚</div><br><img src="logo.jpg">
</body>
</html>
[root@localhost ~]# vi /usr/local/tomcat8/conf/server.xml<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">              ######在下面插入
<Context docBase="/web/webapp1" path="" reloadable="false" >
</Context>
[root@localhost ~]# tomcatdown
[root@localhost ~]# tomcatup

5、真机测试
通过浏览器访问 : 20.0.0.22:8080 20.0.0.23:8080
显示“金刚”文字,并没有出现 logo.jpg 图片,原因是由于静态图片暂时没配,所以加载不出来

配置 Nginx 调度器(20.0.0.21)

在 Nginx 服务器 上安装 Nginx,反向代理到两个 Tomcat 站点,并实现 负载均衡

[root@nginx1 ~]# tar zxvf nginx-1.15.9.tar.gz -C /opt   '[root@nginx1 ~]# cd /opt/nginx-1.15.9/ [root@nginx1 nginx-1.15.9]# ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_stub_status_module       [root@nginx1 nginx-1.15.9]# make && make install       '//编译安装'[root@nginx1 nginx-1.15.9]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/       '//创建nginx命令软连接'[root@nginx1 nginx-1.15.9]# nginx -t     '//检查语法'nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

添加 Nginx 系统服务

[root@localhost nginx-1.15.9]# vi /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
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target[root@localhost ~]# chmod 754 /lib/systemd/system/nginx.service
[root@localhost ~]# systemctl enable nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to
/usr/lib/systemd/system/nginx.service.
1234567891011121314151617181920

编辑 Nginx 静态页面文件

[root@localhost nginx-1.15.9]# vi /usr/local/nginx/html/index.html<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>静态页面</title>
<style>
body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>静态页面</h1>
<p>这是个静态页面</p>
</body>
</html>

在 http {…} - server{…}中加入 location ~ .*.jsp${…} 动态请求条件规则 以及 静态图片请求规则;
把 Nginx 的默认站点通过 proxy_pass 方法代理到了设定好的 tomcat_server 负载均衡服务器组上。

[root@localhost nginx-1.15.9]# vi /usr/local/nginx/conf/nginx.confhttp {.........省略内容#gzip on;                 #####这行往下插入以下4行
upstream tomcat_server {
server 20.0.0.22:8080 weight=1;
server 20.0.0.23:8080 weight=1;
}server {                       #####到这行结束
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;            ######在这行插入以下  location ~ .*.jsp$ {}(表示动态页面正则);location ~ .*\.()${}(表示静态图片正则)
location ~ .*.jsp$ {proxy_set_header HOST $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Client-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://tomcat_server;}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
root /usr/local/nginx/html/img;
expires 30d;
}location / {                       ####到这行结束
root html;
index index.html index.htm;

创建静态文件目录

[root@localhost nginx-1.15.9]# cd
[root@nginx ~]# mkdir /usr/local/nginx/html/img
[root@nginx ~]# cp /opt/logo.jpg /usr/local/nginx/html/img
[root@localhost ~]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf、查看 Nginx 服务进程。
[root@localhost ~]# ps aux | grep nginx
root      30035  0.0  0.0  20564   620 ?        Ss   Sep26   0:00 nginx: master process nginx
www       30036  0.0  0.0  21020  1332 ?        S    Sep26   0:00 nginx: worker process
root      30121  0.0  0.0 112708   976 pts/0    S+   01:07   0:00 grep --color=auto nginx

查看端口号

[root@localhost ~]# netstat -anpt | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      30035/nginx: master
群集安装完毕,进行测试

(1)测试静态页面效果 打开浏览器访问 20.0.0.21/,可以看到访问到 nginx 静态页面

(2)测试负载均衡效果 打开浏览器访问 http://20.0.0.21/index.jsp。 不断刷新浏览器测试,
可以看到由于权重相同,页面会反复在以下两个页面来回切换。 第一次访问,出现 22 的测试页面,
并且能正常加载 nginx 上的静态页面图片,刷新后,第二次访问,出现 23 的测试页面,
表示负载均衡群集搭建成功,已经可以 在两个 Tomcat server 站点进行切换了。

Nginx 负载均衡和动静分离相关推荐

  1. 使用Nginx负载均衡及动静分离

    使用Nginx负载均衡及动静分离 目录 使用Nginx负载均衡及动静分离 一.系统拓扑图 二.环境准备 三.服务器安装 1.jdk,tomcat,mysql 2.Nginx的安装 2.1 gcc安装 ...

  2. Nginx负载均衡与动静分离

    文章目录 反向代理与负载均衡 nginx动静分离实验 在nginx主机上配置负载均衡 在nginx主机上配置动静分离 反向代理与负载均衡 nginx通常被用作后端服务器的反向代理,这样就可以很方便的实 ...

  3. [Nginx]负载均衡和动静分离

    负载均衡 客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端. 这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的, ...

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

    目录 一:Nginx实现负载均衡原理 二:Nginx动静分离原理 三:Nginx+Tomcat负载均衡.动静分离实验 3.1部署Nginx负载均衡器 3.1.1关闭防火墙,将安装nginx所需的软件包 ...

  5. Nginx+Tomcat实现负载均衡与动静分离

    Nginx+Tomcat实现负载均衡与动静分离 一.Nginx负载均衡和动静分离 1.Nginx 实现负载均衡是通过反向代理实现 反向代理(Reverse Proxy) 是指以 代理服务器(例:Ngi ...

  6. Nginx之反向代理与负载均衡实现动静分离实战

    Nginx之反向代理与负载均衡实现动静分离实战 什么是反向代理与负载均衡 Nginx仅仅作为Nginx  proxy反向代理使用的,因为这个反向代理功能表现的效果是负载均衡集群的效果. 负载均衡指的是 ...

  7. Nginx入门教程-简介、安装、反向代理、负载均衡、动静分离使用实例

    场景 Nginx入门简介和反向代理.负载均衡.动静分离理解 https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102790862 Ub ...

  8. 使用nginx+Apache负载均衡及动静分离

    使用nginx+Apache负载均衡及动静分离 介绍    LB负载均衡集群分两类: LVS (四层)和 nginx或haproxy (七层)    客户端都是通过访问分发器的VIP来访问网站 在七层 ...

  9. Nginx总结(反向代理、负载均衡、动静分离)篇

    一.Nginx简介 什么是Nginx Nginx ("engine x")是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上ngimx,的并发能力确实在同 ...

  10. Docker的安装和镜像管理并利用Docker容器实现nginx的负载均衡、动静分离

    Docker的安装 一.Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化 ...

最新文章

  1. 30分钟内让你明白正则表达式是什么,并对它有一些基本的了解(二)
  2. 林昊获中国计算机学会杰出工程师奖,阿里中间件再获高度肯定,“三位一体”推动技术普惠
  3. python爬虫播放mp3
  4. 使用jprobe建设镜面层叠的原则和见解
  5. NetscalerSSL证书的导入和link
  6. 关于值传递和指针传递
  7. 数组为什么可以使用linq查询
  8. 学会写出"图形界面+数据库"的程序要多长时间?
  9. 世界经典反编译工具reflector下载
  10. java简历项目经验大全,不吃透都对不起自己
  11. hane nfs win 配置_win7下搭建nfs-server的方法
  12. 力学现象演示——圆周运动与弹簧弹力
  13. 数学建模 matlab MATLAB机器学习 分类方法 支持向量机分类 乳腺癌的诊断
  14. 最新07高考零分作文片断
  15. 1.名词(noun)
  16. C语言 实现99乘法口诀表
  17. JACTF misc wp
  18. ngx-datatable的使用
  19. 会解方程会画图的超级计算器
  20. js 点击按钮或者图片,实现图片上传并显示在页面上

热门文章

  1. isolate两三事
  2. Redis中什么是热Key问题?如何解决热Key问题?
  3. Sleepy Cow Sorting(树状数组)
  4. 加载大尺寸图片不清晰,加载原图(ImageLoader,Glide)
  5. 深恶痛绝!关闭win10自动更新的办法
  6. webx框架 实现文件上传保存服务器 解析
  7. Random Walk 随机游走算法
  8. 医院挂号系统代码_人脸识别+身份绑定!高科技精准打击医院号贩子
  9. “满五唯一”和“满二唯一”是什么?有什么不同?
  10. 004@ kernel 的配置和编译总结 分析2