因为OpenResty近期更新到了支持HTTP/3的nginx,需要注意以下事项。

打开reuseport

在多worker配置下需要打开HTTP/3端口的reuseport选项,否则会导致两个UDP包被不同的worker处理,从而客户端报ERR_DRAINING错误。

多个Host在同一个端口监听的话,只需在其中的任意一个listen directive中添加reuseport。

把$http_host替换成$host

由于HTTP/3不再发送 Host 头而改用 :authority 伪头来,$http_host 变量变为空值。因此$http_host和ngx.var.http_host都需要改为$host和ngx.var.host。

添加Alt-Svc头

浏览器不会默认通过 HTTP/3 连接,但在看到 Alt-Svc 头后才开始尝试使用 HTTP/3 协议。

另外,随着http3的加入,http2从listen directive中被弃用,改为单独的http2 on/off; directive。

我将以上更改写成一个自动化脚本,用来批量更新多个nginx conf文件。