nginxにMIME typeを追加する

デフォルトの mime.types ファイルを編集せずに追加する方法

まずダメな例から。以下のように設定するとうまく動作しなくなる

server {
    # 省略
    types {
        application/javascript mjs;
    }
}

このように書くと、このバーチャルホストではデフォルトのtypes設定全体が上書きされ、.mjs以外のファイルは全てContent-Type: application/octet-streamで返されるようになってしまう。

デフォルト設定を残しつつ追加するには、デフォルト設定と同一のコンテキストに書かなくてはならない

nginx.confを見ると・・・

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    # 省略

    include /etc/nginx/conf.d/*.conf;
}

デフォルトの設定が記述されているmime.typesはhttpコンテキストで読み込まれているので、追加のMIME typeもhttpコンテキストに記述すればいい。具体的には/etc/nginx/conf.d/mime.confというファイルを作成して、そこに書く。

# /etc/nginx/conf.d/mime.conf 
types {
    application/javascript mjs;
}

これでデフォルトの設定を壊さずに追加される

バーチャルホスト設定の中に書くのであれば、locationで拡張子mjsの場合にtypesを上書きするように設定する。このlocationにマッチしたリクエストの処理ではデフォルトのMIME type設定は全て上書きされてしまうが、mjsしか返さないので問題ない。

server {
    # 省略

    location ~* \.mjs$ {
        types {
            application/javascript mjs;
        }
    } 
}