V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
KalaSearch
V2EX  ›  程序员

写了篇文章 - 高性能 Nginx HTTPS 调优 如何为 HTTPS 提速 30%

  •  6
     
  •   KalaSearch · 2020-12-23 10:22:43 +08:00 · 9716 次点击
    这是一个创建于 1441 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Nginx 应该是应用最广泛的服务器之一了,不管是反代还是负载均衡都有它的身影。

    我们也一直用 Nginx 来作反向代理,同时完成一些简单的安全和负责 HTTPS 之类的任务。前段时间有用户提到苹果设备( iOS Safari )上搜索请求慢,因此进入了踩坑之旅。

    Nginx 的可配置参数可谓眼花缭乱,而 HTTPS 的配置更需要了解一些底层原理才能知其所以然。

    而我们之前在调整一些配置其实没有完全吃透,几乎是看着 stackoverflow 找了个模板来调整。

    所以索性这次读了 High Performance Web Browser,同时跟一位有经验的同事一起,把 Nginx 重新调整了一遍,把首次请求的延迟降低了 30% 左右。当然这个数字会随着你的业务和请求数据而变化,但是如果是网站的话,很可能提升会更大

    在改配置的时候我配合着 HPBN 做了详细的笔记,顺便整理了出来,写成了这篇文章,希望大家喜欢。

    全文请戳 => 高性能 Nginx HTTPS 调优

    同时对应的配置也放到了 Github 上,欢迎参考使用 => 高性能 Nginx HTTPS 调优对应配置

    图是用 Canva 做的,欢迎随意盗图 :D

    Nginx HTTPS 调优

    第 1 条附言  ·  2020-12-23 14:17:20 +08:00

    如果感兴趣的话,欢迎大家关注我的微博或者公号,偶尔会发些思考和技术文章

    微博是:https://weibo.com/oeddyo

    公众号是:谢科的创业笔记

    52 条回复    2020-12-28 15:59:38 +08:00
    Judoon
        1
    Judoon  
       2020-12-23 10:42:08 +08:00
    "卡拉先生发布于 2020 年 12 月 25 日 | 上次编辑:2020 年 12 月 23 日"

    我穿越了?
    KalaSearch
        2
    KalaSearch  
    OP
       2020-12-23 10:43:28 +08:00   ❤️ 4
    一些好的链接推荐在这里

    [High Performance Browser Networking]( https://hpbn.co/) - 有点老但是深入浅出把应用层程序员需要关心的 TCP,UDP 讲得很清楚

    [Nginx Setting Doc]( http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_buffer_size) - 官方文档

    [how to reduce ssl time of website]( https://stackoverflow.com/questions/36672261/how-to-reduce-ssl-time-of-website) - SO 上一个非常好的讨论

    [如何用 CURL debug 延迟问题]( https://help.heroku.com/NY64S5NL/how-do-i-debug-latency-issues-using-curl)
    KalaSearch
        3
    KalaSearch  
    OP
       2020-12-23 10:44:19 +08:00
    @Judoon 你没有穿越,这是 markdown 里手写的,我不知道为什么手抽了... 那就提前祝圣诞快乐吧
    KalaSearch
        4
    KalaSearch  
    OP
       2020-12-23 10:44:47 +08:00
    @Judoon (上次编辑是 git 抽的时间,所以是准的)
    airqj
        5
    airqj  
       2020-12-23 11:00:57 +08:00
    已收藏 :)
    leido
        6
    leido  
       2020-12-23 11:10:55 +08:00
    ssl_session_cache 开启了不利于抵御 DDoS 攻击
    KalaSearch
        7
    KalaSearch  
    OP
       2020-12-23 11:17:07 +08:00
    @airqj 感谢喜欢 <3
    KalaSearch
        8
    KalaSearch  
    OP
       2020-12-23 11:23:21 +08:00
    @leido 是因为可能耗尽连接资源?
    fengmumu
        9
    fengmumu  
       2020-12-23 11:32:11 +08:00
    收藏+1
    Junzhou
        10
    Junzhou  
       2020-12-23 11:35:07 +08:00 via iPhone
    ios Safari 上请求慢,nginx 配置 OCSP Stapling 就可以了,因为 ios 上会默认进行 ocsp 实时查询
    rihkddd
        11
    rihkddd  
       2020-12-23 11:38:07 +08:00   ❤️ 1
    学习了,两点建议:
    1. 使用统一的性能测量方式,文中有时候是平均值有时候是 p95,如果对性能比较敏感应该用比较严格的标准比如 p99.
    2. 量化每一个优化措施的收益。
    bagheer
        12
    bagheer  
       2020-12-23 11:38:40 +08:00
    为啥你的 kala 搜索一直 beta? 小站想用一下,也不知道你是免费呀还是收费呀, 就一直 beta
    KalaSearch
        13
    KalaSearch  
    OP
       2020-12-23 11:53:17 +08:00
    @Junzhou 是的,文中也有提到,感谢
    qiayue
        14
    qiayue  
       2020-12-23 11:53:55 +08:00
    好几次了,我想找到你的网站,都去搜索“卡卡搜索”,结果没找到。
    直到刚才又看了下你们的 icon 是狗头,所以联想了一下,卡拉是条狗,所以你们的名字是从这里来的吗?
    KalaSearch
        15
    KalaSearch  
    OP
       2020-12-23 11:55:48 +08:00
    @rihkddd 两点都非常到位
    1. 其实到 P999 都是 50ms 左右,但是有非常少量慢查询,截图 Y 轴会不太好看 :D
    2. 是的,应该是这样。文中提到的所有点中,最大的改进是 OCSP 和调整 buffer size
    KalaSearch
        16
    KalaSearch  
    OP
       2020-12-23 11:57:33 +08:00
    @qiayue 哈哈哈,好多人这么问,所以我们干脆就... 把狗头当 icon 了

    但讲真,我们连取名都写了篇 blog: https://kalasearch.cn/blog/how-to-name-your-startup/
    whileFalse
        17
    whileFalse  
       2020-12-23 11:57:51 +08:00
    卡拉搜索在 Mac 上与双拼输入法不兼容。输入拼音后按空格无法上屏,依旧是拼音。
    KalaSearch
        18
    KalaSearch  
    OP
       2020-12-23 11:59:39 +08:00
    @bagheer 是收费的。实在是抱歉,我们还在优化调整一些功能,现在只有被邀请的部分用户,等更成熟一些了会开放自助服务。如果感兴趣的话麻烦你加一下微信,会有商务小哥联系你哒
    bagheer
        19
    bagheer  
       2020-12-23 12:06:28 +08:00
    @KalaSearch 啥都没有,试用都不想...把价格表弄上啊,不然现在丢数据啥的没办法说.
    现在就像个个人玩票的东西,点一下给我弹个个人二维码...
    KalaSearch
        20
    KalaSearch  
    OP
       2020-12-23 12:07:58 +08:00
    @whileFalse 是指电影搜索的 demo 吗?
    Showfom
        21
    Showfom  
       2020-12-23 12:43:43 +08:00 via iPhone
    ssl_trusted_certificate 只要中间链和 CA 就行吧
    Junzhou
        22
    Junzhou  
       2020-12-23 12:53:21 +08:00
    @KalaSearch 好文,已收藏
    whileFalse
        23
    whileFalse  
       2020-12-23 13:16:57 +08:00
    suifengdang666
        24
    suifengdang666  
       2020-12-23 13:32:59 +08:00
    好文,能一次性写得那么清楚的还是第一次见,感谢分享
    yylzcom
        25
    yylzcom  
       2020-12-23 13:33:55 +08:00
    如何检测 OCSP Stapling 是否已经开启?

    这个里面的命令 markdown 解析的时候加链接了, 楼主修改一下?
    tonysbag
        26
    tonysbag  
       2020-12-23 13:37:59 +08:00
    @yylzcom 可以尝试用网站 https://www.ssllabs.com/ssltest/在线检测所有和 SSL 有关的设置。
    KalaSearch
        27
    KalaSearch  
    OP
       2020-12-23 13:38:04 +08:00
    @whileFalse 应该是前端的处理不太好,我找前端修一修。感谢反馈

    之后我们会出一个 Vue 和 React 的前端库,一篮子解决掉前端写搜索框麻烦的问题
    KalaSearch
        28
    KalaSearch  
    OP
       2020-12-23 13:38:24 +08:00
    @yylzcom 感谢~我改一下
    KalaSearch
        29
    KalaSearch  
    OP
       2020-12-23 13:38:48 +08:00
    @suifengdang666 感谢喜欢 <3 提前祝节日快乐
    yylzcom
        30
    yylzcom  
       2020-12-23 13:41:25 +08:00
    @tonysbag #26 嗯 我一直在用, 谢谢分享信息
    anxn
        31
    anxn  
       2020-12-23 13:48:46 +08:00 via Android
    建议配合 cloudflare 写一篇
    用 cf 做 cdn 的也挺多的
    stdout
        32
    stdout  
       2020-12-23 14:09:16 +08:00
    好文,感谢分享
    lbyo
        33
    lbyo  
       2020-12-23 14:37:31 +08:00
    RSS 有没有计划再优化一下,提供文章内容呢?
    psirnull
        34
    psirnull  
       2020-12-23 14:46:23 +08:00
    把项目经理要求的注释掉就可以了。
    garlics
        35
    garlics  
       2020-12-23 14:51:25 +08:00
    有个问题,axios 或者 curl 等非浏览器请求会进行 OCSP 验证吗?
    garlics
        36
    garlics  
       2020-12-23 14:52:03 +08:00
    @garlics 看了 OCSP 的 wiki,说是 chrome 并不使用 ocsp 这种验证方式
    yuthelloworld
        37
    yuthelloworld  
       2020-12-23 14:56:32 +08:00
    好文
    Junzhou
        38
    Junzhou  
       2020-12-23 15:46:47 +08:00 via iPhone
    图片下的标题 为什么要优化 Nginx 少了一个 x
    w292614191
        39
    w292614191  
       2020-12-23 16:00:57 +08:00
    the "http2" parameter requires ngx_http_v2_module in /root/java/nginx/conf/nginx.conf:36
    boboliu
        40
    boboliu  
       2020-12-23 16:32:32 +08:00
    补充下 ocsp stapling 的事:通常国内服务器到 le 的 ocsp server 连接性其实也有问题……所以如果要在国内服务器做这个设定的话,套个代理比较好
    hgc81538
        41
    hgc81538  
       2020-12-23 16:58:26 +08:00
    @KalaSearch 用 ECC 算法證書或許還能提速, 參考 https://v2ex.com/t/732953 四樓
    handsomeroger
        42
    handsomeroger  
       2020-12-23 17:17:14 +08:00
    kisshere
        43
    kisshere  
       2020-12-23 17:40:10 +08:00   ❤️ 2
    高端的 NGINX 往往只需要最简单的 ssl 配置,忙碌了两个小时的陈师傅,最终决定套上 CF 直接开启 HTTPS
    YouLMAO
        44
    YouLMAO  
       2020-12-23 21:27:32 +08:00
    grpc over nginx
    eudore
        45
    eudore  
       2020-12-24 09:17:19 +08:00
    ciphers 的安全性和兼容性怎么样?
    dany813
        46
    dany813  
       2020-12-24 10:01:26 +08:00
    收藏
    prondtoo
        48
    prondtoo  
       2020-12-28 10:21:33 +08:00
    HTTPS 上硬件加速加密解密,独立出来最快。
    haihongblog
        49
    haihongblog  
       2020-12-28 11:06:04 +08:00
    很棒,学到了很多,解决了现有一些问题
    darksword21
        50
    darksword21  
       2020-12-28 11:49:19 +08:00
    订阅了 rss
    Lemeng
        51
    Lemeng  
       2020-12-28 14:42:13 +08:00
    先收藏了,感谢,辛苦了
    7654
        52
    7654  
       2020-12-28 15:59:38 +08:00
    ssl_trusted_certificate /path/to/full_chain.pem;这里不是填 ca.cer 吗
    fullchain 和 key 写在在 ssl_certificate ssl_certificate_key 内
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1173 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 23:04 · PVG 07:04 · LAX 15:04 · JFK 18:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.