在 Nginx 上支持 HTTP/3

HTTP/3 是下一代的 HTTP 协议版本,在 HTTP/3 中将弃用 TCP 而改用基于 UDP 的 QUIC 协议进行传输。QUIC 则是 Google 开发的实验性传输层网络协议,目前已经在 Google、YouTube 等自家产品上广泛应用。

Nginx 在 2019 年 3 月 21 日公布了 1.17.x 版本的路线图,其中谈到了支持 QUIC 和 HTTP/3 的计划。时隔半年,已经迭代到 1.17.5 的版本还未见到 HTTP/3 的身影,倒是 CloudFlare 开源了 QUIC 的实现 quiche,使得 Nginx 提前支持 HTTP/3 成为了可能。

cloudflare/quiche

根据 quiche 的文档,需要下载源码和 Nginx 一同编译,而因为需要 BoringSSL 以及 quiche 开发语言的不同,在编译 Nginx 所需要的环境基础上,还需要 cmake、rust、cargo、golang 等一系列工具的支持。

经过一些努力,目前我维护的 docker-nginx 项目 1.17.5 版本已经默认编译 quiche,同时当前博客所依赖的 Docker LEMP 编排示例也同步更新了。

这里提供一个简单的 HTTP/3 演示,前提条件是你已经开启了 TLSv1.3 的支持,具体的配置改动如下:

server {listen       80;listen       443 ssl http2;// 开启 QUIC 的监听listen       443 quic;server_name  localhost;root   /var/www/default;index  index.php;ssl_certificate /etc/nginx/ssl/localhost.crt;ssl_certificate_key /etc/nginx/ssl/localhost.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256;ssl_prefer_server_ciphers on;ssl_early_data on;// 添加头部提示add_header alt-svc 'h3-23=":443"; ma=86400';location / {try_files $uri $uri/ /index.php?$query_string;}location ~ \.php$ {fastcgi_split_path_info ^(.+\.php)(/.+)$;fastcgi_pass php-fpm:9000;fastcgi_index index.php;include fastcgi_params;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;fastcgi_param PATH_INFO $fastcgi_path_info;}
}

虽然目前除了 Chrome Canary 之外还没有什么客户端支持这个特性,不过 HTTP/3 迟早会定稿并普及开,就当提前尝鲜了,希望 nginx 官方能够早点把 HTTP/3 模块造好。


参考文章

  • Introducing NGINX 1.16 and 1.17
  • HTTP/3 Check
  • 小试HTTP3 – kn007

在 Nginx 上支持 HTTP/3相关推荐

  1. CentOS 7上编译安装PHP 8.1及Nginx 配置支持PHP

    CentOS 7上编译安装PHP 8.1/及Nginx 配置支持PHP 编译安装 Php[端口:9000] 安装编译环境依赖包 yum -y install gcc gcc-c++ glibc aut ...

  2. 升级nginx以支持http2的方法

    本篇文章主要介绍了升级nginx以支持http2的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 本文介绍了升级nginx以支持http2的方法,分享给大家,具体如下 ...

  3. 在nginx上部署vue项目(history模式);

    在nginx上部署vue项目(history模式): vue-router 默认是hash模式,使用url的hash来模拟一个完整的url,当url改变的时候,页面不会重新加载.但是如果我们不想has ...

  4. 通过ngx-lua来统计Nginx上的虚拟主机性能数据

    Web server调研分析 Filed under: Web Server - cmpan @ 2012-10-29 20:38:34 摘要 简单可依赖的架构首先需要有一个简单可依赖的前端WebSe ...

  5. 烂泥:nginx同时支持asp.net与php

    本文首发于烂泥行天下. 经过两天的实验,终于让nginx同时支持asp.net与php了.下面就把具体的配置过程记录如下. 注意:本次实验OS:centos6 64bit. 尽管网络上有很多windo ...

  6. 在Nginx上配置ThinkPHP项目

    前段时间用Apache配合TP开发了一个小型网站,也算是我使用TP的第一次实战.我习惯使用pathinfo模式,本地运行一切正常,然而部署到服务器上时,由于对方使用的是Nginx,默认是不支持Thin ...

  7. nginx同时支持asp.net与php

    经过两天的实验,终于让nginx同时支持asp.net与php了.下面就把具体的配置过程记录如下. 注意:本次实验OS:centos6 64bit. 尽管网络上有很多windows下nginx与asp ...

  8. 你们公司还没使用HTTP3?赶紧来补一补,学习一下如何在Nginx上配置HTTP3。

    你们公司还没使用HTTP3?赶紧来补一补,学习一下如何在Nginx上配置HTTP3. NGINX最新版本,已提供对 QUIC 和 HTTP/3的支持,本文介绍一下如何安装与配置 很高兴能在一个特殊的开 ...

  9. HTTP3快来了,提前学习一下如何在Nginx中支持HTTP3.0/QUIC

    HTTP3快来了,提前学习一下如何在Nginx中支持HTTP3.0/QUIC HTTP3.0,也称作HTTP over QUIC.核心是QUIC(读音quick)协议,由Google在2015年提出的 ...

最新文章

  1. 为什么不建议在 MySQL 中使用 UTF-8?
  2. C# 数据库连接笔记
  3. 本地配置文件git提交
  4. mysql连接出现Unknown system variable ‘tx_isolation‘异常
  5. echarts toolbox 自定义工具
  6. mapping 详解1(mapping type)
  7. currenthashmap扩容原理_ConcurrentHashMap实现原理和源码解读
  8. nmap常用的扫描命令
  9. Web应用程序体系结构– Spring MVC – AngularJs堆栈
  10. 5G毫米波通信中一些量化的概念
  11. vue 给checkbox 赋值_Vue动态生成el-checkbox点击无法赋值的解决方法
  12. 校准 Linux 服务器的时间
  13. VC2015运行库安装失败
  14. Java多线程电影院_java 多线程-快乐订座电影院
  15. ORA-00257错误解决方法
  16. android深色模式省电吗,护眼又省电,深色模式真这么厉害?
  17. 唐人街徒步:在异国情调的纽约感受浓厚的中式气息
  18. 一键下载优美图库图片(附源码了哦)
  19. 【OpenCV入门教程之十一】 形态学图像处理(二):开运算、闭运算、形态学梯度、顶帽、黑帽合辑
  20. AdGuard免费的电脑手机广告拦截程序

热门文章

  1. C# unicode 编码 和 解码
  2. cnblogs客户端发贴解析,Post,Get分析
  3. 进一步理解CSS浮动与清除浮动
  4. Ubuntu: 不显示无线连接 Can't get wireless working on Dell latitude d620
  5. Python实例讲解 -- wxpython 基本的控件 (文本)
  6. Hessian局部线性嵌入算法(HLLE)——matlab实现
  7. 238.除自身以外数组的乘积
  8. 视频跟踪——CMT算法
  9. 用代码证明自己闲的蛋疼(四)——简易坑爹版学生管理系统
  10. go语言sleep一纳秒不准的思考--CPU时间片