Nginxでtypesは上書きできるのか

nginx実践入門をちまちま進めている。今日は第3章を進めていたのだが、いくつか気になることがあったので検証してみた。

typesディレクティブの設定値は上書きできるか?

実践入門には、基本mime.typesincludeして、別途指定したい場合はmime.typesを直接修正する、みたいな感じで書いてあった。

個人的にはそういうのはmime.typesはそのままにしておいて、必要なものだけ上書きする形でできたらいいなあと思ったので、できないのか試してみた。

# ...

http {
    include mime.types;

    types {
        text/html txt;
    }
}

# ...

結果、Nginxを起動した時点で以下の警告が出た。その上で上書きはされるようだ。うーん、その仕様はどうなのか……。

2018/04/19 11:27:35 [warn] 1833#1833: duplicate extension "txt", content type: "text/html", previous content type: "text/plain" in ./etc/nginx.conf:17

ググったところ、以下のようにする感じでハックできると出てきた。

# ...

http {
    include mime.types;

    server {
        # ...

        location ~ \.txt$ {
            types {
                text/html txt;
            }
        }
    }
}

# ...

https://serverfault.com/questions/678673/nginx-how-to-override-add-single-mime-type

その後調べると、公式リファレンスにもあった。上記のとは違い、typesは空にして、default_typeを使ってる。

http://nginx.org/en/docs/http/ngx_http_core_module.html#types

これはこれで微妙……。

access_logは複数設定するとどうなるのか?

access_logを同じように複数設定した場合の挙動が気になったのでこれも一応確認してみた。予想通り、複数のファイルにアクセスログを出力してくれる。便利。

複数回同じディレクティブを書いた場合の挙動もちゃんと公式リファレンスに書かれてるとよかったんだが。