前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx实战操作-动静分离

Nginx实战操作-动静分离

作者头像
用户4919348
发布2020-05-25 16:55:59
2.2K0
发布2020-05-25 16:55:59
举报
文章被收录于专栏:波波烤鸭

  本文我们继续来介绍nginx的实际操作,本文来介绍下Nginx的动静分离的实现。

动静分离

Nginx动静分离实战

动静分离案例

1.nginx目录下创建static文件夹,放入图片或者js文件

2.利用前面的8081服务作为我们的动态资源服务

3.Nginx中配置动静分离

代码语言:javascript
复制
server{
   listen 80;
   server_name localhost;
   location / {
       proxy_pass http://192.168.12.1;
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_send_timeout 60s;
       proxy_read_timeout 60s;
       proxy_connect_timeout 60s;
   }
   location ~ .*\.(gif|jpg|ico|png|css|svg|js)$ {
       root static;
   }
}

4.重新加载配置文件

动静分离的好处是什么呢? 第一个,Nginx本身就是一个高性能的静态web服务器; 第二个,其实静态文件有一个特点就是基本上变化不大,所以动静分离以后我们可以对静态文件进行缓存、或者压缩提高网站性能

缓存处理

  浏览器缓存将文件保存在客户端,好的缓存策略可以减少对网络带宽的占用,可以提高访问速度,提高用户的体验,还可以减轻服务器的负担。因此我们有必要了解它的实现原理,用来提高网站的性能。   当一个客户端请求web服务器, 请求的内容可以从以下几个地方获取:服务器、浏览器缓存中或缓存服务器中。这取决于服务器端输出的页面信息。页面文件有三种缓存状态。

  1. 最新的:选择不缓存页面,每次请求时都从服务器获取最新的内容。
  2. 未过期的:在给定的时间内缓存,如果用户刷新或页面过期则去服务器请求,否则将读取本地的缓存,这样可以提高浏览速度。
  3. 过期的:也就是陈旧的页面,当请求这个页面时,必须进行重新获取。 页面缓存状态是由http header决定的,一个浏览器请求信息,一个是服务器响应信息。主要包括Pragma: no-cache、Cache-Control、 Expires、 Last-Modified、If-Modified-Since。其中Pragma: no-cache由HTTP/1.0规定,Cache-Control由HTTP/1.1规定没有缓存之前

  在没设置缓存之前,访问相应的网站,如果请求的文件没有变化,会出现 from memory cache,从内存中获取数据。这是因为nginx在处理本地资源的时候,会自动追加一个Etag(对象的标志值,就一个对象而言,文件被修改,Etag也会修改)和Last-modified(WEB 服务器认为对象的最后修改时间,比如文件的最后修改时间,动态页面的最后产生时间)头部信息,chrome在收到携带了这两个信息的资源并且在没有设置expires头部的情况下,会自动决定过期策略,chrome会保存这个过期策略,下次请求的时候会直接from memory cache。   但是在实际应用中,我们必须要强制指定expire策略,而不是由chrome来自动决定

  Nginx可以通过expires设置缓存,比如我们可以针对图片做缓存,因为图片这类信息基本上不会改变。 在location中设置expires 格式: expires 30s|m|h|d

代码语言:javascript
复制
location ~ .*\.(jpg|jpeg|gif|bmp|png|js|css|ico)$ {
   root static;
   expires 1d;
}

动静分离的压缩优化

  我们一个网站一定会包含很多的静态文件,比如图片、脚本、样式等等,而这些css/js可能本身会比较大,那么在网络传输的时候就会比较慢,从而导致网站的渲染速度。因此Nginx中提供了一种Gzip的压缩优化手段,可以对后端的文件进行压缩传输,压缩以后的好处在于能够降低文件的大小来提高传输效率。我们访问某个网站,获取一个js文件,将该文件保存下来,对比传输大小和实际大小; 传输大小比实际大小要小很多,举个例子来看看。 没有压缩前,

放入到static中,访问

没有什么变化,然后我们加上压缩

参数

默认

Gzip on|off

是否开启gzip压缩

Gzip_buffers 4 16k

设置gzip申请内存的大小,作用是按指定大小的倍数申请内存空间。4 16k代表按照原始数据大小以16k为单位的4倍申请内存。

Gzip_comp_level[1-9]

压缩级别, 级别越高,压缩越小,但是会占用CPU资源

Gzip_disable

正则匹配UA 表示什么样的浏览器不进行gzip

Gzip_min_length

开始压缩的最小长度(小于多少就不做压缩),可以指定单位,比如 1k

Gzip_http_version 1.0|1.1

表示开始压缩的http协议版本

Gzip_proxied

nginx 做前端代理时启用该选项,表示无论后端服务器的headers头返回什么信息,都无条件启用压缩

Gzip_type text/pliain,application/xml

对那些类型的文件做压缩 (conf/mime.conf)

Gzip_vary on|off

是否传输gzip压缩标识; 启用应答头"Vary: Accept-Encoding";给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩

代码语言:javascript
复制
	gzip                on;
    gzip_min_length     5k;
    gzip_buffers        4 16k;
    gzip_comp_level     3;
    gzip_types          application/javascript  image/jpeg;
    gzip_vary           on;

重新加载配置文件测试 你会发现图片被压缩了近1/3.

最后大家注意:

  1. 图片、mp3这样的二进制文件,没必要做压缩处理,因为这类文件压缩比很小,压缩过程会耗费CPU资源
  2. 太小的文件没必要压缩,因为压缩以后会增加一些头信息,反而导致文件变大
  3. Nginx默认只对text/html进行压缩 ,如果要对html之外的内容进行压缩传输,我们需要手动来配置
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/05/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 动静分离
    • Nginx动静分离实战
      • 动静分离案例
    • 缓存处理
      • 动静分离的压缩优化
      相关产品与服务
      文件存储
      文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档