nginx-backend間でKeepAliveする

nginxをフロントにおいて、バックエンド(upstream)にリバースプロキシするというのはよくあるけど、nginx - upstreamでkeepaliveさせるには設定がいる。数年前にやっていたのに忘れていたのでメモ。

公式のドキュメントはこちら。 Module ngx_http_upstream_module

公式のママだが、(1)httpバージョンを1.1にする (2)Connectionヘッダを空にする、の2つの設定が必要となる。

upstream http_backend {
    server 127.0.0.1:8080;

    keepalive 16;
}

server {
    ...

    location /http/ {
        proxy_pass http://http_backend;
        proxy_http_version 1.1;  // http1.1する=デフォルトでKeepAliveする
        proxy_set_header Connection ""; //nginxはデフォルトでcloseを入れてしまうので空にする
        ...
    }
}

参考

blog.nomadscafe.jp

qiita.com

コネクションを毎回新規生成しなくなるのでスループットも上がる。

http1.1ならデフォルトでKeepAliveする、というのもすっかり忘れていた。 http2だとどうなるんだろう。