1、基本概述
web中静态资源和动态资源的概念。
- 静态资源:即前端的固定页面,包含了HTML、CSS、JS和图片的资源,不需要查数据库也不需要后台服务处理返回,直接能够显示的页面。具体的形式为:客户端发送请求到web服务器,web服务器仅是从内存中获取响应的文件返回给客户端,客户端解析并渲染显示出来。
- 动态资源:请求需要后台程序处理(比如从数据库中读取数据),由后台程序将结果返回给web服务器,web服务器再返回给客户端解析并渲染显示出来。
2、工作原理
Nginx中动静分离的大致思路。
为了将静态资源和动态资源分离开,将静态资源部署在Nginx上,动态资源还是在后端服务器上。如果是静态资源的请求,则直接从Nginx配置的静态资源目录下获取资源;如果是动态资源的请求,则利用Nginx的反向代理,将请求转发到后台服务器中获取动态资源,从而实现动静分离。
需要注意的是,实际项目中,静态资源一般也不直接部署在Nginx服务器上,而是通过CDN服务获取静态资源。
动静分离只有好处:
- 动静分离后, 即使动态服务不可用, 但静态资源不会受到影响
- 减少不必要的请求消耗, 同时能减少请求的延时
3、应用案例
0.环境准备 | 系统 | 服务 | 服务 | 地址 | | —- | —- | —- | —- | | CentOS7.5 | 负载均衡 | Nginx Proxy | 10.0.0.5 | | CentOS7.5 | 静态资源 | Nginx Static | 10.0.0.7 | | CentOS7.5 | 动态资源 | Tomcat Server | 10.0.0.8 |
1.在_10.0.0.7_
服务器上配置静态资源
[root@web01 conf.d]# cat ds_oldboy.conf
server{
listen 80;
server_name ds.oldboy.com;
root /soft/code;
index index.html;
location ~* .*\.(png|jpg|gif)$ {
root /soft/code/images;
}
}
# 准备目录, 以及静态相关图片
[root@web01 ~]# mkdir /soft/code/images -p
[root@web01 ~]# wget -O /soft/code/images/nginx.png http://nginx.org/nginx.png
[root@web01 ~]# systemctl restart nginx
2.在_10.0.0.8_
服务器上配置动态资源
[root@web01 ~]# yum install -y tomcat
[root@web01 ~]# mkdir /usr/share/tomcat/webapps/ROOT
[root@web01 ~]# vim /usr/share/tomcat/webapps/ROOT/java_test.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<HTML>
<HEAD>
<TITLE>JSP Test Page</TITLE>
</HEAD>
<BODY>
<%
Random rand = new Random();
out.println("<h1>Random number:</h1>");
out.println(rand.nextInt(99)+100);
%>
</BODY>
</HTML>
#重启tomcat服务
[root@web01 ~]# systemctl start tomcat
3.在负载均衡_10.0.0.5_
上配置调度, 实现访问_jsp_
和_png_
root@lb01 conf.d]# cat ds_proxy.conf
upstream static {
server 10.0.0.7:80;
}
upstream java {
server 10.0.0.8:8080;
}
server {
listen 80;
server_name ds.oldboy.com;
location / {
root /soft/code;
index index.html;
}
location ~ .*\.(png|jpg|gif)$ {
proxy_pass http://static;
include proxy_params;
}
location ~ .*\.jsp$ {
proxy_pass http://java;
include proxy_params;
}
}
[root@lb01 conf.d]# systemctl restart nginx
4.通过负载测试访问静态资源
5.通过负载测试访问动态资源
6.在负载均衡_10.0.0.5_
上整合动态和静态资源的_html_
文件
[root@lb01 ~]# mkdir /soft/code -p
[root@lb01 ~]# cat /soft/code/index.html
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>测试ajax和跨域访问</title>
<script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
</head>
<script type="text/javascript">
$(document).ready(function(){
$.ajax({
type: "GET",
url: "http://ds.oldboy.com/java_test.jsp",
success: function(data) {
$("#get_data").html(data)
},
error: function() {
alert("fail!!,请刷新再试!");
}
});
});
</script>
<body>
<h1>测试动静分离</h1>
<img src="http://ds.oldboy.com/nginx.png">
<div id="get_data"></div>
</body>
</html>
7.测试动态和静态资源是否能正常加载在一个_html_
文件中
8.当使用_systemctl stop nginx_
停止_Nginx_
后, 会发现静态内容无法访问, 动态内容依旧运行正常
9.当使用_systemctl stop tomcat_
停止_tomcat_
后, 静态内容依旧能正常访问, 动态内容将不会被请求到