Nginx动静分离配置实现与说明


Posted in Servers onApril 07, 2022

一、概述

1.1 动态页面与静态页面区别

  • 静态资源: 当用户多次访问这个资源,资源的源代码永远不会改变的资源。
  • 动态资源:当用户多次访问这个资源,资源的源代码可能会发送改变。

1.2 什么是动静分离

  • 动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路
  • 动静分离简单的概括是:动态文件与静态文件的分离。
  • 伪静态:网站如果想被搜索引擎搜素到,动态页面静态技术freemarker等模版引擎技术

1.3 为什么要用动静分离

  • 在我们的软件开发中,有些请求是需要后台处理的(如:.jsp,.do等等),有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件,否则动态文件。因此我们后台处理忽略静态文件。这会有人又说那我后台忽略静态文件不就完了吗。当然这是可以的,但是这样后台的请求次数就明显增多了。在我们对资源的响应速度有要求的时候,我们应该使用这种动静分离的策略去解决。
  • 动静分离将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。这里我们将静态资源放到nginx中,动态资源转发到tomcat服务器中。
  • 因此,动态资源转发到tomcat服务器我们就使用到了前面讲到的反向代理了。

二、Nginx实现动静分离

2.1 架构分析

Nginx动静分离配置实现与说明

2.2 配置

动静分离的原理很简单,通过location对请求url进行匹配即可,在/Users/Hao/Desktop/Test(任意目录)下创建 /static/imgs 配置如下:  

###静态资源访问
server {
  listen       80;
  server_name  static.jb51.com;
  location /static/imgs {
       root /Users/Hao/Desktop/Test;
       index  index.html index.htm;
   }
}
###动态资源访问
 server {
  listen       80;
  server_name  www.jb51.com;
    
  location / {
    proxy_pass http://127.0.0.1:8080;
     index  index.html index.htm;
   }
}

别一种按访问资源配置

server {
        listen 80;
        server_name  3water.com;
        access_log  /data/nginx/logs/3water.com-access.log main;
        error_log  /data/nginx/logs/3water.com-error.log;
 
        #动态访问请求转给tomcat应用处理
        location ~ .(jsp|page|do)?$ {      #以这些文件结尾的
           proxy_set_header  Host $host;
           proxy_set_header  X-Real-IP  $remote_addr;
           proxy_pass http://tomcat地址;
        }
 
        #设定访问静态文件直接读取不经过tomcat
        location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$  {     #以这些文件结尾的
           expires      30d;
           root /data/web/html ;
        }
}

三、动静分离与前后分离区别:

  • 动静分离动态资源与静态资源分离,不会部署在同一台服务器上。
  • 前后分离:网站架构模式,微服务开发基于SOA面向于服务器开发,后台和前端都采用调用接口方式。将一个项目拆分成一个控制Web(前端)和接口(后端),最终使用rpc远程调用技术。视图层和业务逻辑层拆分,中间采用RPC远程调用技术

四、一些问题

  • 为什么互联网公司项目中,静态资源url后面会加上一个时间戳?他的作用:控制缓存
    • 目的:最终的目的是为了控制项目上线的时候,薪静态资源与老的浏览器缓存静态资源避免冲突问题。
    • 解决办法:加上时间戳规范t = 项目上线
  • 304走本地缓存状态码原理:
    • 默认浏览器图片缓存是7天。
    • 第一次下载资源的时候,客户端保存修改资源时间
    • 第二次下载资源的时候,服务端判断客户端上一次修改的时间是否需返回200还是304
    • 第二次下载资源的时候,服务端判断当前资源文件与客户端上一次修改的时间是否需返回200还是304客户端第二次下载资源最后修改时间 2018/6/28 下午11:07:11
    • 服务端最后一次修改时间大于客户端最后一次修改的时间200重 新加载资源
    • 服务器端最后一次修改的时间小于客户端最后修改的时间返回304走本地缓存

生产环境中js css最后一次的修改时间与客户端缓存的最后一次修改的时间可能会产生
冲突。服务器在2018年5月22日上线,用户在2018年6月01日访问,用户上线新js文件在2018年06月5日最后一次修改时间还是保留上次上线时间。所以一般来说在服务器上线的时候,都会在静态资源上加上时间戳 强制最新的资源

Servers 相关文章推荐
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
Jun 21 Servers
nginx常用命令放入shell脚本详解
Mar 31 Servers
Filebeat 采集 Nginx 日志的方法
Mar 31 Servers
Mac环境Nginx配置和访问本地静态资源的实现
Mar 31 Servers
nginx中proxy_pass各种用法详解
Nov 07 Servers
Windows和Linux上部署Golang并运行程序
Apr 22 Servers
Apache POI操作批量导入MySQL数据库
Jun 21 Servers
Windows server 2022创建创建林、域树、子域的步骤
Jun 25 Servers
Nginx报错104:Connection reset by peer问题的解决及分析
Jul 23 Servers
Windows Server 2016服务器用户管理及远程授权图文教程
Aug 14 Servers
nginx配置指令之server_name的具体使用
Aug 14 Servers
CentOS7 minimal 最小化安装网络设置过程
Dec 24 Servers
Nginx禁止ip访问或非法域名访问
Apr 07 #Servers
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
Apr 07 #Servers
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
Apr 07 #Servers
Linux、ubuntu系统下查看显卡型号、显卡信息详解
Nginx速查手册及常见问题
从零开始在Centos7上部署SpringBoot项目
CentOS7和8下安装Maven3.8.4
You might like
php中对2个数组相加的函数
2011/06/24 PHP
php实现每天自动变换随机问候语的方法
2015/05/12 PHP
Symfony2安装第三方Bundles实例详解
2016/02/04 PHP
PDO::query讲解
2019/01/29 PHP
PHP PDOStatement::fetchObject讲解
2019/02/01 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
2019/04/10 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
2019/10/11 PHP
PHP 实现 JSON 数据的编码和解码操作详解
2020/04/22 PHP
常用简易JavaScript函数
2009/04/09 Javascript
javascript放大镜效果的简单实现
2013/12/09 Javascript
js 获取、清空input type="file"的值示例代码
2014/02/19 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
jqPlot jQuery绘图插件的使用
2016/06/18 Javascript
jQuery文字提示与图片提示效果实现方法
2016/07/04 Javascript
jQuery学习笔记之回调函数
2016/08/15 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
微信小程序使用Socket的实例
2017/09/19 Javascript
对VUE中的对象添加属性
2018/09/18 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
2019/01/21 Javascript
小程序跳转H5页面的方法步骤
2020/03/06 Javascript
Vue.js暴露方法给WebView的使用操作
2020/09/07 Javascript
jupyter安装小结
2016/03/13 Python
解决pandas使用read_csv()读取文件遇到的问题
2018/06/15 Python
python使用time、datetime返回工作日列表实例代码
2019/05/09 Python
Flask框架单例模式实现方法详解
2019/07/31 Python
Python 音频生成器的实现示例
2019/12/24 Python
keras 自定义loss层+接受输入实例
2020/06/28 Python
Django视图、传参和forms验证操作
2020/07/15 Python
Python列表嵌套常见坑点及解决方案
2020/09/30 Python
OSPF有什么优点?为什么OSPF比RIP收敛快?
2013/02/13 面试题
爱岗敬业演讲稿范文
2014/01/14 职场文书
搞笑获奖感言
2014/01/30 职场文书
《逃家小兔》教学反思
2014/02/23 职场文书
社区安全生产月活动总结
2014/07/05 职场文书
政工师工作总结2015
2015/05/26 职场文书