动静分离-Nginx之图片服务器
动静分离
动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路,实际上,何谓动?何谓静呢?拿我们java来说jsp、servlet等就是动,因为他们离开我们的web服务器的支持就会无法正常工作。而js、css等文件就是静了。因为离开web服务器他一样能正常的工作。
动静分离简单的概括是:动态文件与静态文件的分离。
为什么要做动静分离?
在我们的软件开发中,有些请求是需要后台处理的(如:.jsp,.do等等),有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件,否则动态文件。因此我们后台处理忽略静态文件。这会有人又说那我后台忽略静态文件不就完了吗。当然这是可以的,但是这样后台的请求次数就明显增多了。在我们对资源的响应速度有要求的时候,我们应该使用这种动静分离的策略去解决。
动静分离将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。这里我们将静态资源放到nginx中,动态资源转发到tomcat服务器中。
图片服务器实践
1.准备两台主机
①192.168.124.128
部署Nginx并启动,nginx.conf文件
events {
worker_connections 1024;
}
http {
upstream yj{
server 192.168.124.129:8001;
}
server{
listen 8088;
location / {
proxy_pass http://yj;
}
location ~ .*\.(gif|jpg|jpeg|png)$ {
root /opt/nginx/images;
expires -1;
}
}
}
并且在图片root路径/opt/nginx/images的sport文件夹下,放有图片1.jpg(此处应该配合FTP进行图片文件的管理,比如上传下载)
②192.168.124.129
部署测试应用,主要用来展示Nginx服务器上面的图片
showImage.jsp文件
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE>
<html>
<head>
<%@include file="./comm/commSet.jsp"%>
<title>Nginx图片服务器</title>
</head>
<body>
<img src="${ctx}/sport/1.jpg"/>
</body>
</html>
commSet.jsp文件
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="ctx" value="http://192.168.124.128:8088" />
2.验证
访问
http://192.168.124.128:8088/showImage
Nginx反向代理到了129那台机子的8001端口上面的showImage路由,而129部署的项目的jsp页面又引用ip为128的Nginx图片服务器上面的图片资源,展示了出来。
缓存时间expires
①上面的示例中,我们将expires设置为-1,即no-cache,不缓存,每次刷新页面,我们可以观察到
② 我们将expires设置为正数,比如2m,让nginx重新加载其配置文件(./nginx -s reload),再观察
第一次加载页面时
刷新地址栏后
没有加载图片了,数据传输流量明显下降, 等缓存时间过期后,才会重新去加载图片
ps:时间格式
expires -1; //表示数据不缓存
expires 30s; //表示把数据缓存30秒
expires 30m;//表示把数据缓存30分
expires 10h;//表示把数据缓存10小时
expires 1d;//表示把数据缓存1天