面试 java设计模式 Angular idea 常用快捷键 windows loops class solr 网络营销推广 Skeljs Keys.js vue路由 vue案例 photoshop视频教程全集下载 java设计模式视频 bootstrap日历插件 bootstrap时间轴 sallenkey滤波器 oracle查看数据库 js空格符 虚拟机重启命令 svn更新本地代码 汇编语言clr 重置hosts 郑州普通话 python3入门 python最大值 javascanner javapackage java编程入门 java运行环境配置 javaforeach java获取年份 java运行环境 打马赛克的软件 主板排名天梯图 js延迟加载 java字符串截取 maplesim 氤氲之息哪里爆率高
当前位置: 首页 > 学习教程  > 编程语言

在 Nginx 上支持 HTTP/3

2020/7/24 9:37:01 文章标签:

在 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

本文链接: http://www.dtmao.cc/news_show_50139.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?