上一篇文章介绍了宝塔如何为网站开启HTTP3,这个适合没有反代的网站,但是如果我们平常使用Docker的时候就会发现之前的文章是无法解决Docker项目的HTTP3开启了。

HTTP3是要求全链路都需要支持QUIC的,而大多数情况容器本身也不会去考虑支持QUIC并且也没必要,难道就没有办法了吗?

当然有啦。其实目的就是利用了Nginx的缓存。虽然服务器到容器的链路不支持QUIC,但是如果用户访问不到服务器到容器的链路,直接读Nginx的缓存,那么即可实现HTTP3。

启用网站监听443QUIC

我们进入带有反代的网站设置,跟之前的教程一样,添加

第一次添加的网站

1
listen  443 quic reuseport;

以后添加的网站

1
listen  443 quic;

quic

开启缓存

在我们已经在宝塔中设置好的反代中,点击开启缓存。并且点击配置文件。

开启缓存

插入响应头

我们需要在location里添加我们之前文章中说的响应头:

1
add_header Alt-Svc 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"';

大功告成

我们可以看到已经成功获得了HTTP3的支持啦!

HTTP3支持

HTTP3支持

给Python项目添加HTTP3支持

我们知道了nginx缓存的方案可以让不支持QUIC的项目支持HTTP3。那么同样的原理可以用在Python项目上。

我的某个项目是Python项目,只需要

server块添加QUIC监听:

1
listen 443 quic;

在 location 块中添加缓存支持

1
2
3
4
proxy_ignore_headers Set-Cookie Cache-Control expires;
proxy_cache cache_one;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 304 301 302 1m;

在 location 块中添加http3支持

1
add_header Alt-Svc 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"';

即可实现HTTP3。