前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >初识Nginx性能安全优化

初识Nginx性能安全优化

作者头像
用户5521279
发布2019-06-20 15:27:39
5830
发布2019-06-20 15:27:39
举报
文章被收录于专栏:搜狗测试

前言

最近小编的项目上线了官方网站,同大部分Web服务网站相同,小编项目的Web站采用了LNMP(Linux、Nginx、Mysql、PHP)架构。其中Nginx的作用是将静态资源进行解析返回给用户;动态资源通过FastCGI接口发送给PHP引擎服务,PHP进行读库解析,并最终把Nginx服务把获取的数据返给用户。

因为此Web站主要作用是协助运营同学推广产品,所以除了最基本的网站页面测试,Web页面的性能、合理的服务器资源分配同时也是比较重要的需求。一方面,我们可以通过优化浏览器渲染、HTML文件格式、文本资源压缩等方式提升页面性能;一方面可以考虑优化Nginx的配置来增强其传输及并发支持能力。

方案一:配置Nginx gzip压缩提升性能

Nginx gzip压缩模块提供了压缩文件内容的功能,用户请求的内容在发送到客户端之前,Nginx服务器会根据一些具体的策略实施压缩,以节约网站出口带宽,同时加快数据传输效率,来提升用户访问体验。

Nginx gzip压缩特点
  • 提升网站用户体验:发送给用户的内容小了,用户访问单位大小的页面就加快了,用户体验也就随之提升。
  • 节约网站带宽成本:数据是压缩传输的,因此节省了网站的带宽流量成本,不过压缩时会稍微消耗一些CPU资源,这个一般可以忽略。
参数配置

对应的参数配置解释如下:

代码语言:javascript
复制
gzip on;开启gzip压缩功能。gzip_min_length lk;设置允许压缩的页面最小字节数,页面字节数从 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,目前大部分浏览器已经支持G2IP解压,使用默认即可。gzip_comp_level 2;压缩比率。用来指定gzip压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理最慢,也比较消耗CPU资源。gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml applicat    ion/xml+rss;用来指定压缩的类型,除了“ text/html” 之外,还允许对指定的MIME类型进行gzipping响应。特殊值“*”匹配任何MIME类型(0.8.29)。text/html始终压缩具有“ ”类型的响应。gzip_vary on;vary header支持。该选项可以让前端的缓存服务器缓存经过gzip压缩的页面,例如用Squid缓存经过 Nginx压缩的数据。

实际参数优化配置如下:

代码语言:javascript
复制
gzip on;gzip_min_length 1k;gzip_buffers 4 32k;gzip_comp_level 5;gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;      gzip_vary on; 

方案二:开启高效文件传输模式

Nginx其实是存在高效模式的,如同显卡和CPU我们可以通过超频来榨干它们的性能,我们也可以开启一些隐藏模式来提升Nginx的工作效率。

sendfile 参数用于开启文件的高效传输模式。同时将tcp_nopush和tcp_nodelay两个指令设置为on,可防止网络及磁盘IO阻塞,实际提高性能。

代码语言:javascript
复制
sendfile on ;tcp_nopush on;tcp_nodelay on;

tcp_nopush 参数用于激活 Linux 上的 TCP_CORK socket 选项,此选项仅仅当开启 sendfile 时才生效,tcp_nopush 参数可以允许把 http response header 和文件的开始部分放在一个文件里发布,以减少网络报文段的数量

方案三:控制Nginx并发连接数量

我们可以通过限制每个key值的连接数,尤其是控制单个IP可连接数。此方法在服务器下载,限制每次访问下载目录的连接数尤其有效。对应配置为nginx_http_limit_conn_module

实际配置文件如下:

代码语言:javascript
复制
[root@Nginx conf]# cat nginx.confworker_processes  4;events {worker_connections  20480;}http {include       mime.types;server_tokens   on;sendfile        on;keepalive_timeout 65;default_type  application/octet-stream;limit_conn_zone $binary_remove_addr zone=addr:10m;             # 添加limit_conn_zone参数server {listen 80;servername www.sogou.com;location / {root html;index index.html index.htm;limit_conn addr 1; # 设置单IP连接数为1 }}}

在客户端使用ab测试工具进行测试:

代码语言:javascript
复制
ab -c 2 -n 10 http://127.0.0.1/

模拟并发连接2,访问服务器10次,可看到状态码200和503间隔是1:1 说明nginx已经做了并发连接的限制,对超时连接做出了503响应。

结束语

在保障基本功能的同时优化前后端性能具有重要意义;产品的基础是用户体验,如果脱离了快速、高效的用户体验,设计再为漂亮的界面也毫无意义。所以当我们在做需求的时候,除了基本的“测试保障”,同时也需要了解架构实现细节,优化安全与效率性,切实测出一个可用、平稳、高效的线上产品。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 搜狗测试 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 方案一:配置Nginx gzip压缩提升性能
    • Nginx gzip压缩特点
      • 参数配置
      • 方案二:开启高效文件传输模式
      • 方案三:控制Nginx并发连接数量
      • 结束语
      相关产品与服务
      文件存储
      文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档