自2018年7月起,谷歌浏览器开始将“ HTTP”网站标记为“不安全”。在过去的几年中,互联网已经迅速过渡到HTTPS,Chrome浏览器的流量超过70%,并且Web排名前100位的网站中有80多个现在默认使用HTTPS 当前Nginx作为最常见的服务器,广泛用于负载均衡(LB)、网关、反向代理。考虑到这一点,让我们看一下Nginx调优技巧,改善Nginx + HTTPS的性能以获得更好的TTFB和更少的延迟。

HTTPS 优化

1. 开启 HTTP/2

HTTP/2最初是在Nginx版本1.9.5中实现的,以取代spdy。在Nginx上启用HTTP/2模块很简单。

原先的配置:

listen 443 ssl;

修改为:

listen 443 ssl http2;

可以通过curl来验证:

curl --http2 -I https://domain.com/

2. 开启 SSL session 缓存

启用 SSL Session 缓存可以减少 TLS 的反复验证,减少 TLS 握手。 1M 的内存就可以缓存 4000 个连接,非常划算,现在内存便宜,尽量开启。

ssl_session_cache shared:SSL:50m; # 1m 4000个,
ssl_session_timeout 1h; # 1小时过期 1 hour during which sessions can be re-used.

3. 禁用 SSL session tickets

由于Nginx中尚未实现SSL session tickets,可以关闭。

ssl_session_tickets off;

4. 禁用 TLS version 1.0

1.3已经出来。1.0可以丢进历史垃圾堆

ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

修改为

ssl_protocols TLSv1.2 TLSv1.3;

5. 启用OCSP Stapling

如果不启用 OCSP Stapling 的话,在用户连接你的服务器的时候,需要去验证证书,这个验证证书的时间不可控,我们开启OCSP Stapling后,可以省掉这一步。

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/full_chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

6. 减小ssl buffer size

ssl_buffer_size 控制在发送数据时的 buffer 大小,默认情况下,缓冲区设置为16k,为了最大程度地减少TTFB(至第一个字节的时间),最好使用较小的值,这样TTFB可以节省大约30 – 50ms。

ssl_buffer_size 4k;

7. 调整 Cipher 优先级

更新更快的 Cipher放前面,这样延迟更小。

# 手动启用 cipher 列表
ssl_prefer_server_ciphers on; # prefer a list of ciphers to prevent old and slow ciphers
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

提升NginxTLS/SSL HTTPS 性能的7条优化建议的更多相关文章

  1. 对Android开发者有益的40条优化建议

    下面是开始Android编程的好方法: 找一些与你想做事情类似的代码 调整它,尝试让它做你像做的事情 经历问题 使用StackOverflow解决问题 对每个你像添加的特征重复上述过程.这种方法能够激 ...

  2. 对 Android 开发者有益的 40 条优化建议

    本文转载于:http://www.oschina.net/translate/40-developer-tips-for-android-optimization?cmp 下面是开始Android编程 ...

  3. 【转】对Android开发者有益的40条优化建议

    下面是开始Android编程的好方法: 找一些与你想做事情类似的代码 调整它,尝试让它做你像做的事情 经历问题 使用StackOverflow解决问题 对每个你像添加的特征重复上述过程.这种方法能够激 ...

  4. [转]对Android开发者有益的40条优化建议

    下面是开始Android编程的好方法: 找一些与你想做事情类似的代码 调整它,尝试让它做你像做的事情 经历问题 使用StackOverflow解决问题 对每个你像添加的特征重复上述过程.这种方法能够激 ...

  5. 对Android 开发者有益的 40 条优化建议(转)

    下面是开始Android编程的好方法: 找一些与你想做事情类似的代码 调整它,尝试让它做你像做的事情 经历问题 使用StackOverflow解决问题 对每个你像添加的特征重复上述过程.这种方法能够激 ...

  6. 我的Android进阶之旅------>对Android开发者有益的40条优化建议

    下面是开始Android编程的好方法: 找一些与你想做事情类似的代码 调整它,尝试让它做你像做的事情 经历问题 使用StackOverflow解决问题 对每个你像添加的特征重复上述过程.这种方法能够激 ...

  7. SEO:Yahoo 14条优化建议

    腾讯前端设计的Leader推荐我背熟的.请大家都能好好学习,不要像我一样一扫而过,好好的记下来!不仅仅是晓得一些CSS xhtml就好了,深刻认识到很多的东西需要学习的.很早就用Firebug,但是却 ...

  8. IOS开发-提升app性能的25条建议和技巧

    前言 这篇文章介绍了作者开发工作中总结的25个iOS开发tips, 多年之前读过这篇文章.收益良多,基本每一个tips在我的应用开发过程中都使用过.今天把这篇文章又一次整理转发下,与大家一起学习,不论 ...

  9. 智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 )

    SQL Optimizer for SQL Server 帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 SQL Optimizer for SQL Server 让 SQL Serve ...

随机推荐

  1. 性能超四倍的高性能.NET二进制序列化库

    二进制序列化在.NET中有很多使用场景,如我们使用分布式缓存时,通常将缓存对象序列化为二进制数据进行缓存,在ASP.NET中,很多中间件(如认证等)也都是用了二进制序列化. 在.NET中我们通常使用S ...

  2. SQL Server On Linux:基于实际项目案例,总结功能支持情况及相关问题解决方案,讲如何快速完成迁移

    上个月,有个朋友问我说Sql Sever向Mysql迁移有什么好的经验分享,他们公司客户明确提出不再提供Windows服务器,现在计划Mysql迁移.我说Mysql迁移成本太高了,不妨可以了解一下SQ ...

  3. aix5.3安装httpd服务

    1.安装gcc(1)从IBM上下载 gcc-4.0.0-1.aix5.3.ppc.rpm gcc-cplusplus-4.0.0-1.aix5.3.ppc.rpm libgcc-4.0.0-1.aix ...

  4. Go语言从入门到放弃(结构体常见的tag)

    什么是tag Tag是结构体中某个字段别名, 可以定义多个, 空格分隔 type Student struct {     Name string `ak:"av" bk:&quo ...

  5. Laya 踩坑日记-BitmapFont 字体模糊

    基于bitmap 制作的字体,放到项目中,因为最终使用的是位图字体(所有的字全是一张图片),所以一旦出现压缩./放大等情况的时候, 字体就开始模糊了,暂时没有他好的办法解决

  6. LeetCode108 将有序数组转为二叉搜索树

    将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组: [-10,-3,0, ...

  7. linux硬盘分区和fdisk命令

    分区的几个概念 硬盘分区有三种,主分区.扩展分区.逻辑分区.一个硬盘主分区至少有1个,最多4个,扩展分区可以没有,最多1个.且主分区+扩展分区总共不能超过4个.逻辑分区可以有若干个.在windows下 ...

  8. iconv函数报错 Detected an illegal character in input string

    近日使用php代码导出文件为excel,一直乱码.导出修改编码都无效,最后发现,是需要修改php导出代码本身的编码.首先用记事本打开php代码,另存为,选择ANSI格式.然后打开iconv函数这个ph ...

  9. 在Firefox上使用Chrome的crx扩展程序

    假如你喜欢使用Firefox火狐浏览器,可是发现有个很喜欢很想用的扩展只发布了支持Chrome的crx格式--Firefox从57版以后使用了WebExtension API作为新附加组件的开发标准, ...

  10. Maven + springboot + mybatis 构建多模块工程

    废话不说先上最终效果:创建一个空项目,再创建一个父项目用来管理各模块并维护各模块关系,简要说明如下: parent模块:主要用来管理以下各模块,和各模块涉及的jar包版本和boot项目入口级的的依赖管 ...