本文我们继续来介绍nginx的实际操作,本文来介绍下Nginx的动静分离的实现。
1.nginx目录下创建static文件夹,放入图片或者js文件
2.利用前面的8081服务作为我们的动态资源服务
3.Nginx中配置动静分离
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服务器, 请求的内容可以从以下几个地方获取:服务器、浏览器缓存中或缓存服务器中。这取决于服务器端输出的页面信息。页面文件有三种缓存状态。
在没设置缓存之前,访问相应的网站,如果请求的文件没有变化,会出现 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
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头来判断,是否需要压缩 |
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.
最后大家注意: