追記
[nginx-announce] nginx-1.13.9
http://mailman.nginx.org/pipermail/nginx-announce/2018/000207.html
1.13.9でサーバプッシュがサポートされました
先程、Nginxでサーバプッシュをサポートするコミットが入ったので試す。
HTTP/2: server push.
http://hg.nginx.org/nginx/rev/641306096f5b
ビルド
$ git clone https://github.com/nginx/nginx.git $ cd ./nginx $ ./auto/configure --with-http_ssl_module --with-http_v2_module $ make $ sudo make install #一旦インストールしてしまう
設定
一旦 h2cで設定する。
$ sudo vim /usr/local/nginx/conf/nginx.conf server { listen 80 http2; #h2を有効化 server_name localhost; http2_push_preload on; #preload方式のプッシュを有効化 location / { root html; add_header "Link" "</test.js>;rel=preload"; #Linkヘッダを付ける index index.html index.htm; } }
- http2_push_preload onとすることで、Linkヘッダでpreload指定されたファイルをプッシュするようになる (リバースプロキシでバックエンドから送っても良い)
- 今回は、add_header ヘッダで直接Linkヘッダを指定
preloadの詳しい仕様は
https://w3c.github.io/preload/ 参照
試す
$ sudo ./objs/nginx #起動 #nghttpで確認する。適宜インストールしてね $ nghttp http://localhost -vn .... [ 0.004] recv (stream_id=13) :method: GET [ 0.004] recv (stream_id=13) :path: /test.js [ 0.004] recv (stream_id=13) :authority: localhost [ 0.004] recv (stream_id=13) :scheme: http [ 0.004] recv PUSH_PROMISE frame <length=23, flags=0x04, stream_id=13>
ちゃんと、PUSH_PROMISEが送られている。
良さそう。
ちなみに、Apacheの場合はこちら
asnokaze.hatenablog.com