前言

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

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

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

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

Nginx gzip压缩特点

  • 提升网站用户体验:发送给用户的内容小了,用户访问单位大小的页面就加快了,用户体验也就随之提升。

  • 节约网站带宽成本:数据是压缩传输的,因此节省了网站的带宽流量成本,不过压缩时会稍微消耗一些CPU资源,这个一般可以忽略。

参数配置

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

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压缩的数据。

实际参数优化配置如下:

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阻塞,实际提高性能。

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

实际配置文件如下:

[root@Nginx conf]# cat nginx.conf

worker_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测试工具进行测试:

ab -c 2 -n 10 http://127.0.0.1/

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

结束语

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

欢迎添加我们的搜狗测试微信号,与我们一起聊聊测试。

nginx 还是欢迎界面_初识Nginx性能安全优化相关推荐

  1. nginx 防止恶意域名解析_配置nginx只允许域名访问,禁止ip访问【图文教程】

    平凡也就两个字: 懒和惰;成功也就两个字: 苦和勤;优秀也就两个字: 你和我.跟着我从0学习JAVA.spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美!每一篇文章都是心 ...

  2. nginx 负载 sessionid 不一致_你不知道的Nginx负载均衡算法,快进来迅速掌握

    关于负载均衡的三种算法,轮询法,随机法,最小连接法,这三种负载均衡的算法,但是关于负载均衡还有其他的算法,我们也需要你去看,而且在面试的过程中,很有可能是会问到的呦. 对于要实现高性能集群,选择好负载 ...

  3. nginx header参数丢失_某Nginx后门分析与重现

    安全分析与研究 专注于全球恶意软件的分析与研究 背景 前几天,接到一个nginx后门样本,本着就分析和复现的思路,完整的将整个过程做一次复现,不料最终还获取到了后门的核心代码部分,遂将其整理发布,仅供 ...

  4. 浏览器接收响应数据过大_交互响应性能之优化FID

    由于 FID 需要一个真实用户的交互,所以无法用实验数据测试. 为了在实验数据下预测 FID,通常会用 TBT(Total Blocking Time),具体这个指标后面文章会介绍.他们测量的内容不同 ...

  5. 初识Nginx及编译安装Nginx

    初识Nginx及编译安装Nginx 环境说明: 系统版本    CentOS 6.9 x86_64 软件版本    nginx-1.12.2 1.什么是Nginx? 如果你听说或使用过Apache软件 ...

  6. ajax nginx 转发 sessionid_Nginx:初识Nginx(概念、在Docker中安装Nginx、常用命令、配置文件) - 怀梦想,致远方...

    1.Nginx初识 (1)概念 Nginx是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好 Nginx可以作为静态页面 ...

  7. 初识Nginx (一)

    初识Nginx (一) Nginx适用于哪些场景 一个web请求从红色箭头进来后,会先经过Nginx,然后进入应用程序,然后再去访问数据库或缓存服务. 那么这里有一个问题,我们的应用服务要求的开发效率 ...

  8. nginx 代理 内存_科普Nginx和apache的区别及优缺点比较

    最近很多小伙伴来问我Nginx和apache的区别,这个问题用三言两语也很难解释,于是整理出了这一篇文章与大家共享.除了Nginx和apache的区别,还比较了各自的优缺点.这是我自学Nginx和工作 ...

  9. centos nginx不是命令_虚拟机下Centos 8.0 安装PHP+Mysql+Nginx

    按照此教程,我成功安装了环境,作心得记录. 第一步:安装nginx 推荐教程:http://nginx.org/en/linux_packages.html#RHEL-CentOS 1.安装必备必备工 ...

最新文章

  1. R语言dplyr包排序及序号函数实战(row_number、ntile、min_rank、dense_rank、percent_rank、cume_dist)
  2. 给自己出的iOS面试题
  3. Oracle8i 到Oracle 12c的2014年最新PSU、Bundle Patch、SPU信息
  4. Python基础-socket编程
  5. Windows - cd 命令
  6. 2021年速卖通828年中大促活动报名攻略
  7. boost::gursoy_atun_layout用法的测试程序
  8. 用java雷电游戏_Java实现仿雷电游戏
  9. range函数python3_Python3如何使用range函数替代xrange函数
  10. 《Web前端开发修炼之道》-读书笔记CSS部分
  11. 机器学习笔记(常见算法)
  12. Touch 方法属性 映射工具
  13. RssTookit使用小结
  14. mysql--innodb索引原理详解_MYSQL索引机制(InnoDB索引原理详解)
  15. 使用Jenkins容器构建时,关于maven项目settings.xml的位置
  16. Burp Suite
  17. 存储端显示主机链路降级_链路优化、产品升级,腾讯广告让汽车营销更轻松
  18. JavaSE基础——反射
  19. 水系图一般在哪里找得到_水系电池再发Nature,事实力证将迎来发展的春天!
  20. 嵌入式C语言(入门必看)

热门文章

  1. javascript的实现事件的一些实例
  2. java实现二叉树的构建以及3种遍历方法
  3. Magento 头部的演示信息去除
  4. G4Sui老师的pair project(197)
  5. Thymeleaf 基本用法总结
  6. 短期主义和长期主义的思考
  7. MPLSMTU对MPLS网络质量的影响
  8. JSP中页面向Action传递参数的几种方式
  9. 微信小程序-开心大转盘(圆盘指针)代码分析
  10. jQuery 事件用法详解