讓Nginx v1.27.0支援HTTP/2和HTTP/3

3 min

language: ja bn en es hi pt ru zh-cn zh-tw

大家好,我是無能。
東京的房子好不容易找到一次,結果又回到原點,最近總覺得好像又找到不錯的物件了。最糟的情況,就隨便找個合租屋住進去吧。

最近在現在的公司,同一個專案的成員說要幫我辦歡送會,讓我覺得很感激。
我深深覺得自己的人生遇到很多好人。

話說回來,前陣子我向Deno提交了Pull Request,他們設定了里程碑,所以我可以不慌不忙地追蹤原始碼。Deno的Rust程式碼不知不覺間已經變得非常龐大,即使是微不足道的功能,也要盡可能減少變動,因為說明書就像原始碼一樣,所以只能多方嘗試了。
如果行不通,到時候再說吧。

讓Nginx支援HTTP/2和HTTP/3

讀到PHP開發者拉斯姆斯·勒多夫的採訪文章時,看到他說對HTTP/2感到未來可期,我就想『咦,我的Nginx伺服器怎麼樣了呢?』,於是決定嘗試支援它。
看來Nginx支援HTTP/3是從v1.25以後,所以先確認版本。

# nginx -v
nginx version: nginx/1.27.0

看來是支援的。
我的Nginx不是透過pkg安裝的,而是自己編譯的,所以在相同的FreeBSD環境下可能會有差異。

先不考慮複雜的事情,姑且讓它支援看看。

寫入conf檔案

因為只是作為反向代理伺服器運行的Nginx,所以就快速進行吧。

server {
    listen 443 ssl;
    listen 443 quic reuseport;
    listen [::]:443 quic reuseport;

    http2 on;
    http3 on;
    server_name soulminingrig.com www.soulminingrig.com;

總覺得HTTP/3好像是Google正在推動的,而QUIC協定本身好像也是Google開發的。
在標頭資訊中追加以下內容

        add_header Alt-Svc 'h3=":443"; ma=86400';
        add_header X-Content-Type-Options nosniff;

然後,用nginx -t進行測試,如果沒有問題就重新啟動。
因為我是以root使用者身份操作,所以執行以下指令。

service nginx restart

然後,QUIC本身似乎使用443/UDP,所以好像需要開放這個連接埠...
第三章 詳解HTTP/3 ~ 如何活用QUIC,如何實現高速化

目前許多實作預設都使用UDP的443號連接埠。

如上所述

        add_header Alt-Svc 'h3=":443"; ma=86400';

設定的是443號連接埠,所以開放443號連接埠,如果需要更改,開放其他連接埠應該就可以了。

vim /etc/pf.conf

然後追加以下內容

set skip on lo
exsrv1 = 167.179.75.206
~~~
# HTTP/3 Protocol
pass in inet proto udp from any to $exsrv1 port 443

然後用-nf選項測試,再用-f應用。

pfctl -nf /etc/pf.conf
pfctl -f /etc/pf.conf

有正確應用嗎?

雖然也有用Curl確認是否應用成功的方法,但通常這種時候從與自己網路無關的地方確認會比較好驗證,所以我在瀏覽器上確認。
HTTP/3 檢查
Image
嗯,成功了!

雖然也有人設定得更詳細,但我認為目前這樣就可以了。
那麼,下次再見了。

Related Posts