在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

如何在Nginx中开启HTTP3.0的支持

112次阅读
没有评论

共计 5480 个字符,预计需要花费 14 分钟才能阅读完成。

本篇内容介绍了“如何在 Nginx 中开启 HTTP3.0 的支持”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

方案选择

对于 HTTP3.0,由于整个协议还是处于草案阶段,目前来说没有一个完整的标准,所以各大浏览器厂商还只是在开发者版本中才会支持,例如 Chrome 的金丝雀版本 Chrome Canary[1],并且各个服务器厂商也是在持续跟进中,对于 Nginx 来说,支持 HTTP3.0 目前有两种方案可以选择:

基于 Cloudflare 的分支版本 Nginx:对于 HTTP3.0/QUIC,Cloudflare 始终走在了前列,借助于自家维护的开源项目
    quic
    [2],从 Nginx 中拉出了一个分支来开发,并编译出了对 HTTP3.0 支持的 Nginx 服务器。Nginx 官方 Nginx-quic 项目:今年 6 月 10 日,Nginx
    官博
    [3] 发布公告称已经在研发支持 HTTP3.0/QUIC 协议的工作,目前项目维护在
    nginx-quic
    [4],该项目和基于 Cloudflare 基于 Nginx 的分支并无关系,算是相对于正统的方案。

基于此,本文将会以部署 nginx-quic 的方式来让 Nginx 支持 HTTP3.0/QUIC。 

改造过程

我们最终的目的是得到 nginx-quic 版本的 nginx 可执行文件,需要经过一系列的安装和编译,期间可能会遇到很多问题,如果各位读者不想实际操作,可以直接用我编译好的版本 nginx-quic.linux-x86_64.zip 传送门 [5]。 

准备工作:

以 centos7 为例,下载 nginx-quic 源码传送门 [6],下载完成之后,需要进行编译安装,由于 nginx-quic 依赖 boringSSL,所以还需下载 boringSSL 源码传送门 [7],然后同样需要编译安装 boringSSL,执行这些操作之前,需要在 linux 上安装一些前置模块,通过 yum 来安装,执行以下命令:

sudo yum install build-essential mercurial psmisc lsb-release cmake golang libunwind-dev git libpcre3-dev zlib1g-dev

什么是 boringSSL:

对于 Nginx 来说,在编译时需要配置对于的 SSL 库,不管是 HTTP3.0 还是 HTTP2.0,始终都要基于 HTTPS,而加密算法这块主要有 OpenSSL 来提供,而 BoringSSL 是谷歌创建的 OpenSSL 分支,用于支持 TLS1.3 的 UDP 协议 0 -RTT 数据传输的加密算法(可以理解成 TLS1.3 是标准协议,BoringSSL 是实现工具),BoringSSL 的一些特性会在合适的时机同步给 OpenSSl。 

编译安装 boringSSL:

cd boringssl-master/
mkdir build
cd build
cmake ../
make

 

执行之后,可以在 build/crypto,和 build/ssl 下获得对应的文件,如下图:

注意编译安装 boringSSL 需要使用 cmake3 以上的版本。 

编译安装 nginx-quic:

cd nginx-quic/
./auto/configure --prefix=/root/nginx --with-http_ssl_module --with-http_v2_module --with-http_v3_module --with-cc-opt= -I../boringssl-master/include  --with-ld-opt= -L../boringssl-master/build/ssl -L../boringssl-master/build/crypto
make 
make install

 

执行命令之后,会在 /root/nginx 目录下生成对应的 nginx 可执行文件,如下图:

 

其中,配置文件在 conf/ 下,nginx 命令在 sbin/ 目录下。

修改配置文件,启动 nginx:

vi /root/nginx/conf/nginx.conf

 

添加 http3 配置:

server {
 listen 443 ssl http2; # TCP listener for HTTP/2
 listen 443 http3 reuseport; # UDP listener for QUIC+HTTP/3

 ssl_protocols TLSv1.3; # QUIC requires TLS 1.3
 ssl_certificate ssl/www.example.com.crt;
 ssl_certificate_key ssl/www.example.com.key;

 add_header Alt-Svc  quic= :443  h4-27= :443 h4-25= :443  h4-T050= :443  h4-Q050= :443 h4-Q049= :443 h4-Q048= :443  h4-Q046= :443  h4-Q043= :443  # Advertise that QUIC is available
}

 

其中,要求使用 TLSv1.3 版本,并且当浏览器不支持 http3 时,可以选择 http2。另外,add_header Alt-Svc 添加这个返回头不可缺少。

Alt-Svc 全称为“Alternative-Service”,直译为“备选服务”。该头部列举了当前站点备选的访问方式列表,让服务器可以告诉客户端“看,我在这个主机的这个端口用这个协议提供相同的服务”。一般用于在提供“QUIC”等新兴协议支持的同时,实现向下兼容。参考
    MDN
    [8]。  验证 HTTP3 生效:

由于目前浏览器对 HTTP3.0/QUIC 的支持性有限,可以通过 http3check.net/[9] 来验证站点启用 HTTP3 是否成功,以我的站点为例:

  坑点总结

整个过程看似很简单,但是真正配置过程中遇到了不少坑,前前后后加上搜索问题花了一天半的时间才真正解决,把这些问题记录下来,分享给大家。

  开启 UDP 的 443 端口:

由于 quic 协议使用的是 UDP 的 443 端口,这个端口对于 centos7 来说是默认关闭的,可以采用下面命令开启:

firewall-cmd --zone=public --add-port=443/udp --permanent

 

如果项目托管在阿里云上,需要更新 ECS 的安全组策略来对外开启对应的协议和端口,如下图:

     TLS 版本向下兼容:

由于使用了 TLS 1.3,所以会修改对应加密算法,但是对于一些浏览器而言还不支持这么高的版本,尤其是对于苹果的 Safari,所以,在配置 nginx 配置文件时,要多配置几个版本向下兼容,代码如下:

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

-Werror 错误问题:

在编译 nginx-quic 时,有时会遇到如下错误:

cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I../boringssl-master/include -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
 -o objs/src/os/unix/ngx_linux_sendfile_chain.o \
 src/os/unix/ngx_linux_sendfile_chain.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I../boringssl-master/include -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
 -o objs/src/event/ngx_event_openssl.o \
 src/event/ngx_event_openssl.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I../boringssl-master/include -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
 -o objs/src/event/ngx_event_openssl_stapling.o \
 src/event/ngx_event_openssl_stapling.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I../boringssl-master/include -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
 -o objs/src/event/ngx_event_quic.o \
 src/event/ngx_event_quic.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I../boringssl-master/include -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
 -o objs/src/event/ngx_event_quic_transport.o \
 src/event/ngx_event_quic_transport.c
src/event/ngx_event_quic_transport.c: In function ‘ngx_quic_create_stream’:
src/event/ngx_event_quic_transport.c:54:9: error: comparison is always true due to limited range of data type [-Werror=type-limits]
 : ((uint32_t) value)  = 16383 ? 2 \
 ^
src/event/ngx_event_quic_transport.c:1299:15: note: in expansion of macro ‘ngx_quic_varint_len’
 len = ngx_quic_varint_len(sf- type);
 ^
cc1: all warnings being treated as errors
make[1]: *** [objs/src/event/ngx_event_quic_transport.o] Error 1
make[1]: Leaving directory `/root/nginx-quic
make: *** [build] Error 2
[root@iz2zehmi1ztqtx8tg6ca7gz nginx-quic]#

 

解决办法是:

cd nginx-quic\objs

vi Makefile

 

找到 CFLAGS = -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I../boringssl-master/include 将 -Werror 参数去掉。

 reuseport 只需配置一次:

假如有多个域名需要开启 http3,则 reuseport 建议只在根域名上配置,如果一个配置文件中出现多个 reuseport,会报错,配置如下:

 server {
 
 listen 443 ssl http2; # TCP listener for HTTP/2
 listen 443 http3 reuseport; # UDP listener for QUIC+HTTP/3

 server_name www.nihaoshijie.com.cn default_server;

 }

 server {

 listen 443 ssl http2; # TCP listener for HTTP/2
 listen 443 http3; # UDP listener for QUIC+HTTP/3

 server_name app.nihaoshijie.com.cn;

 }   

编译安装时的性能问题:

如果编译安装时报类似下面的错误,可能是主机的内容不足,需要关闭一些运行的程序来往下进行。

...
c++: internal compiler error: Killed (program cc1plus)

“如何在 Nginx 中开启 HTTP3.0 的支持”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-17发表,共计5480字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 色欲天天天天天综合网 | 性做久久久久久久 | 四虎最新网 | 久久se精品动漫一区二区三区 | 在线观看不卡视频 | 国产区更新 | 欧美毛片在线播放观看 | 久久精品国产亚洲av无码麻豆 | 两根大肉大捧一进一出好爽视频 | 国产日韩久久久精品影院首页 | 亚洲精品国产一区二区三区在 | 91精品久久久久久久久久小网站 | 亚洲视频免费播放 | 亚洲精品国产一区二区小泽玛利亚 | 免费人成网 | 国内国语一级毛片在线视频 | 午夜欧美精品久久久久久久久 | 一级毛片成人免费看a | 亚洲最大成人网色 | 久久久久久亚洲av成人无码国产 | 国产精品亚洲二区在线观看 | 亚洲自拍偷拍在线观看 | 久久精品区 | 最新在线精品国自产拍福利 | 一道精品一区二区三区 | 东北妇女xx做爰视频 | 麻豆av一区二区三区 | 日本特级黄 | 大学生被内谢粉嫩无套 | 在线观看黄色毛片 | 青青视频国产 | 一本一道波多野结衣av黑人 | a级毛片免费观看在线播放 a级毛片免费看 | 日韩一品在线播放视频一品免费 | 亚洲综合精品一区二区三区 | 黄色免费网站在线观看 | 人人妻人人澡人人爽人人精品97 | 国产亚洲高清视频 | 亚洲欧美人成电影在线观看 | 欧美日韩中文国产一区发布 | 国产婷婷色一区二区三区在线 |