深度优化LNMP之Nginx [2]

配置Nginx gzip 压缩实现性能优化

1.Nginx gzip压缩功能介绍   
Nginx gzuo压缩模块提供了压缩文件内容的功能,用户请求的内容在发送出用客户端之前,Nginx服务器会根据一些具体的策略实施压缩,以节约网站出口带宽,同时加快了数据传输效率,提升了用户访问体验。
2.Nginx gzip 压缩的优点
1.提升网站用户体验:由于发给用户的内容小了,所以用户访问单位大小的页面就快了,用户体验提升了,网站口碑就好了。
2.节约网站带宽成本,由于数据是压缩传输的,因此,此举节省了网站的带宽流量成本,不过压缩会稍微消耗一些CPU资源,这个一般可以忽略。此功能既能让用户体验增强,公司也少花钱。对于几乎所有的Web服务来说,这是一个非常重要的功能,Apache服务也由此功能。
3.需要和不需要压缩的对象
1、纯文本内容压缩比很高,因此纯文本内容是最好压缩,例如:html、js、css、xml、shtml等格式的文件
2、被压缩的纯文本文件必须要大于1KB,由于压缩算法的特殊原因,极小的文件压缩可能反而变大。
3、图片、视频(流媒体)等文件尽量不要压缩,因为这些文件大多数都是经历压缩的,如果再压缩很坑不会减小或减少很少,或者可能增加。而在压缩时还会消耗大量的CPU、内存资源
4、参数介绍及配置说明
此压缩功能很类似早起的Apache服务的mod_defalate压缩功能,Nginx的gzip压缩功能依赖于ngx_http_gzip_module模块,默认已安装。
参数说明如下:
gzip on; #开启gzip压缩功能

gzip_min_length 1k;

#设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取,默认值是0,表示不管页面多大都进行压缩,建议设置成大于1K,如果小于1K可能会越压越大

gzip_buffers 4 16k;

#压缩缓冲区大小,表示申请4个单位为16K的内存作为压缩结果流缓存,默认是申请与原始是数据大小相同的内存空间来存储gzip压缩结果;

gzip_http_version 1.1

#压缩版本(默认1.1 前端为squid2.5时使用1.0)用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP压缩,使用默认即可。

gzip_comp_level 2;

#压缩比率,用来指定GZIP压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理最慢,也消耗CPU资源

gzip_types  text/css text/xml application/javascript; 

#用来指定压缩的类型,“text/html”类型总是会被压缩,这个就是HTTP原理部分讲的媒体类型。

gzip_vary on;

#vary hear支持,该选项可以让前端的缓存服务器缓存经过GZIP压缩的页面,例如用缓存经过Nginx压缩的数据。
配置在http标签端
http{
gzip on;
gzip_min_length  1k;
gzip_buffers     4 32k;
gzip_http_version 1.1;
gzip_comp_level 9;
gzip_types  text/css text/xml application/javascript; 
gzip_vary on;
}
设置完成之后重启Nginx服务器。
并在360|火狐|谷歌  等浏览器中安装插件Firebug和YSlow 进行查看页面压缩率
例如:没有制作压缩图片
制作后

配置Nginx expires 缓存实现性能优化

1.Nginx expires 功能介绍
简单地说,Nginx expires的功能就是为用户访问的网站内容设定一个国企时间,当用户第一次访问到这些内容时,会把这样内容存储在用户浏览器本地,这样用户第二次及此后继续访问网站,浏览器会检查加载缓存在用户浏览器本地的内容,就不会去服务器下载了。直到缓存的内容过期或被清除为止。
深入理解,expires的功能就是允许通过Nginx 配置文件控制HTTP的“Expires”和“Cache-Contorl”响应头部内容,告诉客户端刘琦是否缓存和缓存多久以内访问的内容。这个expires模块控制Nginx 服务器应答时Expires头内容和Cache-Control头的max-age指定。
这些HTTP头向客户端表名了内容的有效性和持久性。如果客户端本地有内容缓存,则内容就可以从缓存(除非已经过期)而不是从服务器读取,然后客户端会检查缓存中的副本。
2.Nginx expires作用介绍
在网站的开发和运营中,对于图片、视频、css、js等网站元素的更改机会较少,特别是图片,这时可以将图片设置在客户端浏览器本地缓存365天或3650天,而降css、js、html等代码缓存10~30天,这样用户第一次打开页面后,会在本地的浏览器按照过期日期缓存响应的内容,下次用户再打开类似页面,重复的元素就无需下载了,从而加快了用户访问速度,由于用户的访问请求和数据减少了,因此节省了服务器端大量的带宽。此功能和apache的expire相似。
3.Nginx expires 功能优点
1.Expires可以降低网站的带宽,节约成本。
2.加快用户访问网站的速度,提升了用户访问体验。
3.服务器访问量降低了,服务器压力就减轻了,服务器成本也会降低,甚至可以解决人力成本。
对于几乎所有Web来说,这是非常重要的功能之一,Apache服务也由此功能。
4. Nginx expires 配置详解
1)根据文件扩展名进行判断,添加expires功能范例。
    location ~.*\.(gif|jpg|jpeg|png|bmp|swf)$
       {
          expires 3650d;
      }
该范例的意思是当前用户访问网站URL结尾的文件扩展名为上述指定的各种类型的图片时,设置缓存3650天,即10年。
提示:配置可以放在server标签,也可以放在http标签下配置
例如:
[root@web02 /]# curl -I www.jd.com
HTTP/1.1 200 OK
Server: jdws
Date: Mon, 25 Jul 2016 15:15:47 GMT
Content-Type: text/html; charset=gbk
Content-Length: 197220
Connection: keep-alive
Vary: Accept-Encoding
Expires: Mon, 25 Jul 2016 15:15:38 GMT #告诉用户什么时候过期
Cache-Control: max-age=20
ser: 6.158
Via: BJ-M-YZ-NX-74(HIT), http/1.1 BJ-UNI-1-JCS-117 ( [cRs f ])
Age: 16
2)根据URI中的路径(目录)进行判断,添加expires功能范例。
location ~^/(images|javascript|js|css|flash|media|static)/ {
  expires 360d;
}
意思是当用户访问URI中包含上述路径(例:images、js、css,这些在服务端是程序目录)时,把访问的内容设置缓存360天,即1年。如果要想缓存30天,设置30d即可。
HTTP/1.1 200 OK
Server: JDWS
Date: Mon, 25 Jul 2016 16:00:32 GMT
Content-Type: text/html; charset=gbk
Vary: Accept-Encoding
Expires: Mon, 25 Jul 2016 16:00:48 GMT    #<==缓存的过期时间
Cache-Control: max-age=20                      #<==缓存的总时间按秒,单位
ser: 130.29
Via: BJ-Y-NX-104(HIT), http/1.1 HK-1-JCS-70 ( [cRs f ])
Age: 14
Content-Length: 197220
5.Nginx expires功能缺点及解决方法
当网站被缓存的页面或数据更新了,此时用户看到的可能还是旧的已经缓存的内容,这样会影响用户体验。
对经常需要变动的图片等文件,可以缩短对象缓存时间,例如:谷歌和百度的首页图片经常根据不同的日期换成一些节日的图,所以这里可以将图片设置为缓存期为1天。
当网站改版或更新内容时,可以在服务器将缓存的对象改名(网站代码程序)。
1. 对于网站的图片、软件,一般不会被用户直接修改,用户层面上的修改图片,实际上是重新传到服务器,虽然内容一样但是是一个新的图片名了
2.网站改版升级会修改JS、CSS元素,若改版的时候对这些元素该了名,会使得前端的CDN以及用户需要重新缓存内容。
6.企业网站缓存日期曾经的案例参考
若企业的业务和访问量不同,那么网站的缓存期时间设置也是不同的,比如:
a、51CTP:1周
b、sina:15天
c、京东:25年
d、淘宝:10年
7.企业网站有可能不希望被缓存的内容
1.广告图片,用于广告服务,都缓存了就不好控制展示了。
2.网站流量统计工具(js代码)都缓存了流量统计就不准了
3.更新很频繁的文件(google的logo),如果按天,缓存效果还是显著的。

Nginx日志相关优化与安装

1.编写脚本脚本实现Nginx access日志轮询
Nginx目前没有类似Apache的通过cronlog或者rotatelog对日志分割处理的能力,但是,运维人员可以通过利用脚本开发、Nginx的信号控制功能或reload重新加载,来实现日志自动切割,轮询。
(1)配置日志切割脚本
[root@web02 /]# mkdir /server/scripts/ -p
[root@web02 /]# cd /server/scripts/
[root@web02 scripts]# cat cut_nginx_log.sh
cd /application/nginx/logs && \
/bin/mv www_access.log www_access_$(data +%F -d -1dy).log  #将日志按日志改成前一天的名称
/application/nginx/sbin/nginx -s reload         #重新加载nginx使得重新生成访问日志文件
提示:实际上脚本的功能很简单,就是改名日志,然后加载nginx,重新生成文件记录日志。
(2)将这段脚本保存后加入到定时任务,设置每天凌晨0点进行切割日志
[root@web02 scripts]# crontab -e
###cut nginx access log
00 00 * * * /bin/sh /server/scripts/cut_nginx.log.sh >/dev/null 2>&1
解释:每天0点执行cut_nginx_log.sh脚本,将脚本的输出重定向到空。
2.不记录不需要的访问日志
对于负载均衡器健康检查节点或某些特定文件(比如图片、js、css)的日志,一般不需要记录下来,因为在统计PV时是按照页面计算的。而且日志写入频繁会大量消耗磁盘I/O,降低服务的性能。
具体配置如下:
     location ~ .*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)?$ {
        access_log off; 
}
这里用location标签匹配不记录日志的元素扩展名,然后关掉了日志。
3.访问日志的权限设置
加入日志目录为/app/logs,则授权方法为:
chown -R root.root /app/logs/
chmod -R 700 /app/logs
不需要在日志目录上给nginx用户读或写的许可。

Nginx站点目录及文件URL访问控制

1.根据扩展名限制程序和文件访问
Web2.0时代,绝大多数网站都是以用户为中心,例如:BBS、blog、sns产品,这几个产品共同特点就是不但允许用户发布内容到服务器,还允许用户发图片甚至附件到服务器,由于为用户打开了上传的功能,因为给服务器带来了很大的安全风险。
下面将利用Nginx配置禁止访问上传资源目录下的PHP、shell、perl、Python程序文件,这样用户即使上传了木马文件也没法去执行,从而加强了网站的安全。
配置Nginx,限制禁止解析指定目录下的制定程序。
 location ~ ^/images/.*\.(php|php5|.sh|.pl|.py)
        { 
       deny all; 
        } 
location ~ ^/static/.*\.(php|php5|.sh|.pl|.py)
        { 
           deny all; 
        } 
location ~* ^/data/(attachment|avatar)/.*\.(php|php5)
    { 
        deny all; 
    } 
Nginx下配置禁止访问*.txt文件
location ~*\.(txt|doc)${
    if (-f $request_filename) {
    root /data/www/www;
    #rewrite ....可以重定向某个URL
    break;
  }
}
location ~*\.(txt|doc)${
    root /data/www/www;
    deny all;
}
对上述限制需要卸载php 匹配的前面
 对目录访问进行设置
单目录
 location ~ ^/(static)/ {
        deny all;
}
location ~ ^/static {
        deny all;
}
多目录
 location ~ ^/(static)/ {
        deny all;
}
范例:禁止访问目录并返回指定的http状态码
location /admin/ { return 404; }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go int 转切片_一文掌握GO语言实战技能(二)

Go 数组Go 切片Go 变量和内存地址Go Map 类型Go 面向对象编程Go 方法的定义GO 数组数组是同一类型的元素集合。Go中的数组下标从0开始&#xff0c;因此长度为n的数组下标范围是[0, n-1]。整数数组中元素默认初始化为0&#xff0c;字符串数组中的元素默认初始化为""。…

设置固定长度_加气块砌筑(构造柱、圈梁设置)技术交底21条

墙体砌筑技术交底我给下发21条&#xff0c;内容不全&#xff0c;砌筑的墙体观感差&#xff0c;欢迎大家提出宝贵意见1、填充墙的材料、平面位置尺寸见建筑施工图纸&#xff0c;不得随意更改。2、当首层填充墙下无基础梁或结构梁板时&#xff0c;墙下应做基础&#xff0c;基础作…

深度优化LNMP之MySQL

MySQL数据库优化框架体系 1.硬件层面优化 2.操作系统层面优化 3.MySQL数据库层面优化 4.MySQL安全优化 5.网站集群架构上的优化 6.MySQL流程、制度控制优化 硬件层面优化 1、数据库物理机采购 CPU&#xff1a; 64位CPU&#xff0c;一台机器2-16颗CPU。至少2-4颗&#xff0…

element vue 纵向滑动条_Vue 部分

1、ES6Vue &#xff1a;1、Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0c;当与现代化的…

C#集合通论

前言 写这篇文章的最初动力是来自于一次笔试经历。有一道笔试题大概是这样的&#xff1a;程序使用一个txt文件来存储操作记录。存储记录是多行字符串&#xff0c;每一行代表一次操作记录&#xff0c;格式如下&#xff1a;用户名操作事项名称操作时间。现在假设这个txt文件已经非…

Shell 脚本案例实战 [4]

for循环结构for 循环结构语句1.for循环结构&#xff1a;语法&#xff1a;for 变量名 in 变量取值列表do指令…done提示&#xff1a;在此结构中“in 变量取值列表”可省略&#xff0c;省略时相当于in “$”&#xff0c;使用for i 就相当于使用for i in “$”2.C语言型for循环结构…

深度优化LNMP之PHP

PHP缓存加速介绍1.操作码介绍及缓存原理当客户端请求一个php程序时&#xff0c;服务器的PHP引擎会解析该PHP程序&#xff0c;并将其编译为特定的操作码文件&#xff08;Operate Code,opcode&#xff09;该文件是执行PHP代码后的一种二进制表示形式。默认情况下&#xff0c;这个…

PHP服务Fcgi进程及PHP解析优化

1、PHP引擎缓存加速常见四种软件&#xff1a;1.eAccelerator2.Zendcache3.xcache4.apc5.zendopcache php5.5自带2、使用tmpfs作为缓存加速缓存的文件目录 [rootweb02 ~]# mount -t tmpfs tmpfs /dev/shm -o size256m[rootweb02 ~]# mount -t tmpfs /dev/shm/ /tmp/eaccelerator…

电路 晶振频率_都说晶振是电路的心脏,你真的了解它吗?

之所以说晶振是数字电路的心脏&#xff0c;就是因为所有的数字电路都需要一个稳定的工作时钟信号&#xff0c;最常见的就是用晶振来解决&#xff0c;可以说只要有数字电路的地方就可以见到晶振。常见种类我们常说的晶振&#xff0c;包含两种。一种需要加驱动电路才能产生频率信…

ios 数组中的字典排序_利用数组和字典,实现按指定规则的排序

大家好&#xff0c;今日我们继续讲解数组与字典解决方案&#xff0c;今日讲解第47讲&#xff1a;利用字典和数组&#xff0c;实现按指定规则的排序。随着字典讲解的深入,我们发现字典真的很神奇,在VBA代码中,给人以十分清爽的感觉,在这套数组与字典解决方案中,我会尽可能的把经…

MVC3学习:利用mvc3+ajax实现登录

用到的工具或技术&#xff1a;vs2010,EF code first,JQuery ajax,mvc3。 第一步&#xff1a;准备数据库。 利用EF code first&#xff0c;先写实体类&#xff0c;然后根据实体类自动创建数据库&#xff1b;或者先创建数据库&#xff0c;再写实体类&#xff0c;都可以。如果实体…

vue获取tr内td里面所有内容_vue 项目学习

首先页面的整体内容结构以及package.json 里面的内容package.jsonrouter.js 路由功能import Vue from vue import Router from vue-router import Login from /login;Vue.use(Router) let router new Router({routes: [{path: /,redirect: {name: Login},},{path: /Login,na…

ubuntu中解压rar文件遇到乱码的解决方法

如上图所示&#xff0c;在用ubuntu的时候经常会遇见rar压缩文件打开出现乱码&#xff0c;解压的时候也会出现无效的编码等错误。 解决方法是用 sudo apt-get remove rar 卸载rar 然后用 sudo apt-get instal unrar 安装unrar 然后就可以解决这个问题了。 个人理解rar是用来压缩…

kmeans中的k的含义_硬质合金中P、M、K、N、S、H六大字母含义详解

数控技术在线订单 | 技术 | 干货 | 社群关注可加入机械行业群&#xff01;关注P类:硬质合金中&#xff0c;P类产品的切削范围是指碳钢&#xff0c;铸钢&#xff0c;包括0.25-0.25%C淬火和调质&#xff0c;易切钢包含退火与淬火调质&#xff0c;低碳合金钢含金元素少于5%的范围&…

gitlab集成ldap用户后,禁用原来的账户体系进行拉取代码

gitlab在集成ldao用户后&#xff0c;经过测试&#xff0c;用户可以还可以通过原来的账号体系进行项目代码的拉取&#xff0c;需要把原来的账号体系的拉取功能关闭&#xff0c;使用ldap的账号体系进行工作开展。 方法如下&#xff1a; 在管理员-设置-通用-登录限制里把 Allow…

ffmpeg 分辨率 压缩_用GPU加速FFmpeg中的超分辨率功能

1. 简要回顾首先简单复述一下FFmpeg中对深度学习的支持情况&#xff0c;如上图所示&#xff0c;FFmpeg在libavfilter中支持基于深度学习的filter&#xff0c;目前已经支持sr, derain和dnn_processing等filter&#xff0c;其中&#xff0c;dnn_processing是一个通用的filter&…

mysql存储过程输入参数拆分_一文看懂mysql数据库存储过程、函数、视图、触发器、表...

概述抽空总结一下mysql的一些概念性内容&#xff0c;涉及存储过程、函数、视图、触发器等。一、查看存储过程、函数、视图、触发器、表1、存储过程select * from mysql.proc where typePROCEDURE;show procedure status; show create procedure proc_name; //存储过程定义2、函…

oracle vm发现无效设置_Oracle数据库编译失效对象相关命令总结大全,值得收藏

概述在日常数据库维护过程中&#xff0c;我们会发现数据库中一些对象(包Package、存储过程Procedure、函数Function、视图View、同义词.....)会失效,呈现无效状态(INVALID)。有时候需要定期检查数据库中存在哪些失效对象&#xff0c;对于存在异常的对象需要重新编译&#xff0c…

WCF-001:WCF的发布

随着“云”时代的到来&#xff0c;“云”已经无处不在了。什么是“云”&#xff0c;无非就是利用互联网强大的功能建立多个服务器&#xff0c;然后再利用互联网的传输数据的特点将数据从某个服务器中读取出来或者将你的数据上传上去。当然这个服务器不是一定就是传统意义的服务…

在线编辑_水墨-在线 Markdown 编辑器

水墨-在线 Markdown 编辑器基于 Spring-boot、FreeMarker、layui、Vditor 构建的一款在线 所见即所得的 Markdown 编辑器。水墨-在线 Markdown 编辑器。本人使用 Vditor 编辑器时日已久&#xff0c;眼看着其功能日益强大&#xff0c;特此基于 Vditor 构建一款 Web 编辑器&#…