因為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文件。