nginxでアクセスログにspdyのバージョンを出す

nginxでアクセスログにhttp2の通信か出力する http/2はこちら。(2015/08/18追記)



nginx 1.5.10でspdy3.1に対応されました。

ふと、nginx側のログでspdyを使ってのアクセスか確認する方法が気になって試してみた。

設定

結論としてはlog_formatを使うだけ


nginx.conf

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" '
                      'spdy:$spdy';

    access_log  /var/log/nginx/access.log  main;
    server {
        listen       80;
        server_name  localhost;
...

このように、log_formatの部分に$spdyを加えるだけ。

出力

以上の設定を行い、nginxを再起動すると

192.168.0.21 - - [06/Feb/2014:16:20:17 +0000] "GET / HTTP/1.1" 200 612 "-" 
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.102 Safari/537.36"
"-" spdy:3.1

このように、spdyのバージョンが表示されました。


非対応ブラウザの場合、spdyのバージョンは何も表示されません

192.168.0.21 - - [06/Feb/2014:16:24:01 +0000] "GET / HTTP/1.1" 200 612 "-" 
"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)" 
"-" spdy: