一、什么是动静分离?

Nginx动静分离简单来说就是把动态和静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是将动态请求和静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat处理动态页面。动静分离从目前实现角度来讲大致分为两种,一种是纯粹的把静态文件放在独立的服务器上,独立出来用域名访问,也是目前主流推崇的方案;另外一种方法就是动态跟静态文件混合在一起部署,通过Nginx来分开。

二、为什么要动静分离?

Tomcat是一个比较全面的web容器,对静态网页的处理,应该是比较费资源的,特别是每次都要从磁盘读取静态页面,然后返回。这中间会消耗Tomcat的资源,可能会使那些动态页面解析性能受到影响。将静态资源和动态资源隔离开、能够有效的减轻Tomcat服务器的压力,提升网站整体性能。

三、动静分离的实现

查看系统、Nginx、Tomcat的版本号

cat /etc/redhat-release

rpm -qa |grep nginx

/usr/local/tomcat8-1/bin/version.sh

开始配置Nginx,这里Nginx我是用yum安装的,安装可以见另一篇博客https://www.cnblogs.com/opsprobe/p/10773582.html

通过在server段代码配置不同的location实现动静分离

vim /etc/nginx/conf.d/default.conf

写入以下配置

    location ~.*\.(html|htm|css|js|gif|jpg|jpeg|bmp|png|ico|txt|eot|svg|ttf|woff|woff2)$ {
root /usr/local/tomcat8-/webapps/;
expires 30d;
} location ~.*$ {
proxy_pass http://tomcat;
}

配置截图如下:

如果想把新的配置单独写出来也是可以的,比如,新建一个文件 vim /etc/nginx/conf.d/tomcat,将配置写入,在 /etc/nginx/conf.d/default.conf 用include引入,include /etc/nginx/conf.d/tomcat;

以截图中的行数对配置做简单的说明:

第8行,匹配项目中用到的所有静态文件后缀,这些静态文件Nginx直接处理,波浪线~表示匹配。

第9行,root,静态文件Nginx直接从本地磁盘读,然后响应给客户端。

第10行,index  index.html index.htm; 代表默认主页。

第11行,expires,定义用户浏览器缓存时间30天,静态页面不经常更新的话可以节省带宽缓解服务器压力,第一次访问下载新文件状态为200,以后直接访问本地缓存状态为304,直到受访问文件发生变化或者时间到期。

第14行,匹配其他请求,用来转发动态请求到后端应用服务器Tomcat。

第15行,proxy_pass,代表后端服务器组名,此组名必须为后端服务器站点组名,后面upstream{}模块处会有配置。

server{};  server模块是接收外部请求的部分,配置文件里可以写多个server{}块,每个server{}块代表一个Web站点。

server_name;  代表外网访问域名。

location / {};  代表一个过滤器,用于制定不同请求的不同操作。

upstream{} 模块

负载均衡功能是将接收到的请求分配到后端的多台服务器上,Nginx里需要 upstream{} 模块来配合使用

打开另一个配置文件,vim /etc/nginx/nginx.conf(注意:不是 /etc/nginx/conf.d/default.conf 配置文件)

先修改nginx运行默认的用户

第一行 user nginx; 改为 user root;

再写入以下配置:

    upstream tomcat {
ip_hash;
server 127.0.0.1: weight=;
server 127.0.0.1: weight=;
}

配置截图如下:

第32行,upstream xxx{}; upstream模块是命名一个后端服务器组,组名自定义,我这里为“tomcat”,内部可以写多台服务器ip和port,还可以设置跳转规则及权重等等。

第33行,ip_hash,代表使用ip地址方式分配跳转后端服务器,同一ip请求每次都会访问同一台后端服务器,这样每个访客固定访问一个后端服务器,可以解决session的问题,一般用于登录会话。

第34、35行,server,代表后端Tomcat服务器地址和端口,这里Nginx的Tomcat在一台机器上,所以地址为127.0.0.1;weight,指定轮询权重,权重越高,处理的请求就越多,weight和访问比率成正比,用于后端服务器性能不均的情况。

注意:server_name 和 upstream{} 的组名可以不一致,server_name 是外网访问接收请求的域名,upstream{} 的组名是跳转后端服务器时站点访问的域名。

配置完毕后,重启Nginx,让其生效

systemctl restart nginx

部署项目进行测试动静是否分离

将打成war包的项目上传到tomcat的webapps目录下

启动Tomcat,在浏览器通过Nginx访问项目,Nginx的默认端口为80,Tomcat的默认端口为8080

Ctrl+F5刷新页面,查看Nginx和Tomcat的日志

查看Nginx的日志:

tail -n 0 -f /var/log/nginx/access.log

查看Tomcat的日志:

tail -n 0 -f /usr/local/tomcat8-1/logs/localhost_access_log.2019-12-01.txt

可以看到静态请求和动态请求成功分离了

四、负载均衡

确保项目可以正常访问后,复制tomcat8-1,重命名为tomcat8-2,注意:是将部署在tomcat8-1下的项目一起复制的

cp -a /usr/local/tomcat8-1/ /usr/local/tomcat8-2

# 更改tomcat8-2的两处端口,避免与tomcat8-1冲突

vim /usr/local/tomcat8-2/conf/server.xml

第一处:

第二处:

启动tomcat8-2

/usr/local/tomcat8-2/bin/startup.sh

注意:这里为了验证负载均衡效果,需要注释掉 /etc/nginx/nginx.conf 配置文件里的 ip_hash;一行

保存退出,重启Nginx

在浏览器访问项目

Ctrl+F5刷新页面,查看两个Tomcat的日志

用tail命令查看Tomcat的日志,可以看到两个Tomcat都会响应请求

Nginx+Tomcat的负载功能就配置完成了,这只是简单设置了一下,生产环境中还有很多详细的调整,比如,反向代理,防盗链,压缩,缓存策略等等,后续再逐渐增加。

本文参考自:

(1)https://www.cnblogs.com/taiyonghai/p/6728707.html

(2)https://www.cnblogs.com/taiyonghai/p/5610112.html

(3)https://www.cnblogs.com/jiangyang/p/8485046.html

Nginx+Tomcat实现动静分离和负载均衡的更多相关文章

  1. Nginx+Tomcat 实现动态分离,负载均衡

    什么是动静分离 为了提高网站的响应速度,减轻程序服务器(Tomcat,Jboss等)的负载,对于静态资源比如图片,js,css等文件,我们可以在反向代理服务器中进行缓存,这样浏览器在请求一个静态资源时 ...

  2. Ngigx+Tomcat配置动静分离,负载均衡

    由于公司使用过Ngnix,对于刚接触Nginx来说,感觉有些好奇,于是研究了下. 本人在windows下使用的版本是nginx-1.8.1: 1. 启动Ngnix 双击nginx-1.8.1文件夹中n ...

  3. Nginx 动静分离与负载均衡的实现

    一.前提 企业中,随着用户的增长,数据量也几乎成几何增长,数据越来越大,随之也就出现了各种应用的瓶颈问题. 问题出现了,我们就得想办法解决,一般网站环境,均会使用LAMP或者LNMP,而我们对于网站环 ...

  4. 使用nginx实现动静分离的负载均衡集群

    一.概述: LB负载均衡集群分两类: LVS (四层)和 nginx或haproxy (七层) 客户端通过访问分发器的VIP来访问网站 |现在应用更复杂,比如现在网站页面有: .php .html . ...

  5. Nginx+Tomcat在Windows下做负载均衡

    一. 为什么需要对Tomcat服务器做负载均衡 Tomcat服务器作为一个Web服务器,其并发数在300-500之间,如果有超过500的并发数便会出现Tomcat不能响应新的请求的情况,严重影响网站的 ...

  6. HAProxy实现动静分离和负载均衡

    由于电脑配置渣,带不动多台虚拟机,所以采用httpd虚拟主机的方式来实现 1 2 3 CentOS 6.7 httpd: 2.2.15 HAProxy: 1.5.4 主机规划 1 2 3 4 5 - ...

  7. LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡

    前言 首先声明下,由于这两天找资料,看了不少博客 ,但是出于不细心,参考者的博客地址没有记录下来,所有文中要是出现了与大家博客相同的地方,那么请大家在评论区说明并附上博客地址,我好引用进来:这里表示抱 ...

  8. Nginx + Tomcat 动静分离实现负载均衡(转)

    0.前期准备 使用Debian环境.安装Nginx(默认安装),一个web项目,安装tomcat(默认安装)等. 1.一份Nginx.conf配置文件 # 定义Nginx运行的用户 和 用户组 如果对 ...

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

    0.前期准备 使用Debian环境.安装Nginx(默认安装),一个web项目,安装tomcat(默认安装)等. 1.一份Nginx.conf配置文件 # 定义Nginx运行的用户 和 用户组 如果对 ...

随机推荐

  1. 分布式共识算法 (二) Paxos算法

    系列目录 分布式共识算法 (一) 背景 分布式共识算法 (二) Paxos算法 分布式共识算法 (三) Raft算法 分布式共识算法 (四) BTF算法 一.背景 1.1 命名 Paxos,最早是Le ...

  2. 企业应用向ASP.NET Core迁移

    有人说.NET在国内的氛围越来越不行了,看博客园文章的浏览量也起不来.是不是要转Java呢? 没有必要扯起语言的纷争,Java也好C#都只是语言是工具,各有各的使用场景.以前是C#非开源以及不能在Li ...

  3. 使用VUECLI3

    $ yarn global add @vue/cli // OR $ npm install @vue/cli -g 然后在加入下面的代码 $ vue create my-app $ cd my-ap ...

  4. 如何解决github/amazonaws访问不了的问题

    原文链接: https://www.clclcl.fun/2019/12/12/github-blocked/ 如何解决github/amazonaws访问不了的问题 缘起: github.githu ...

  5. jQuery学习路线&review

    学习途径:http://www.w3school.com.cn/jquery/index.asp 路线图 转载自:https://www.cnblogs.com/lanren2017/p/723720 ...

  6. Wait… What Happens When my React Native Application Starts? — An In-depth Look Inside React Native

    Discover how React Native functions internally, and what it does for you without you knowing it. Dis ...

  7. How to get the free disk space in PostgreSQL (PostgreSQL获取磁盘空间)

    Get the current free disk space in PostgreSQL PostgreSQL获取磁盘空间 from eshizhan Here has a simple way t ...

  8. Java实习生入职测试

    网络上一度流行的Java实习生入职测试题,可以看看. 1.String类为什么是final的. 2.JDK8的HashMap的源码,实现原理,底层结构 3.反射中,Class.forName和clas ...

  9. juc包下四大并发工具

    juc.CountDownLatch 闭锁 一个线程在等待一组线程后再恢复执行 await()等待其他线程执行完毕 被等待线程执行完毕后计数器-1 如何知道其他线程执行完了? 计数器,若一组线程为,C ...

  10. Mybatis源码解析(一) —— mybatis与Spring是如何整合的?

    Mybatis源码解析(一) -- mybatis与Spring是如何整合的?   从大学开始接触mybatis到现在差不多快3年了吧,最近寻思着使用3年了,我却还不清楚其内部实现细节,比如: 它是如 ...