Nginxの「could not build optimal types_hash」警告を修正する

beginner Nginx2026-06-12| Nginx 1.10以降を実行しているUbuntu、Debian、CentOS、またはRHELサーバーで、大量のMIMEタイプリストや複雑なサイト設定を扱う際によく見られます。

Error Message

nginx: [warn] could not build optimal types_hash, you should increase either types_hash_max_size: 1024 or types_hash_bucket_size: 64; ignoring types_hash_bucket_size
#nginx#Linux管理#Webサーバー#パフォーマンスチューニング#DevOps

警告メッセージnginx -tを実行したり、サービスをリロードしようとした後に、このメッセージに気づいたかもしれません。内容は次のとおりです:

nginx: [warn] could not build optimal types_hash, you should increase either types_hash_max_size: 1024 or types_hash_bucket_size: 64; ignoring types_hash_bucket_size

これはサーバーをクラッシュさせるものではありませんが、Nginxが最適ではないルックアップ方式を使用していることを意味します。ファイルの提供時にわずかなパフォーマンス低下を引き起こす可能性があります。

なぜNginxは警告を出すのか?Nginxはハッシュテーブルを使用して、ファイル拡張子(.phpや.pngなど)を対応するMIMEタイプに素早くマッピングします。これらのテーブルは、CPUのキャッシュに収まるほど小さく、かつ衝突を避けるほど大きくある必要があります。

標準的なNginxのインストールでは、デフォルトで約100〜150のMIMEタイプを処理します。しかし、最近のWebアプリでは、フォント、特殊な動画フォーマット、マニフェストファイル用のカスタムタイプを数十個追加することがよくあります。mime.typesファイルが大きくなりすぎると、デフォルトのメモリバケットがオーバーフローします。そのためNginxは、現在のメモリ制限ではこれらのエントリを「最適な」方法で整理できないと警告を出します。

修正方法警告を解消するには、Nginxの設定にもう少し余裕を持たせる必要があります。提案された値を2倍にして対応します。

1. メイン設定ファイルを開く多くの環境では、メインの設定ファイルは/etc/nginx/nginx.confにあります。sudo権限で開きます:

sudo nano /etc/nginx/nginx.conf

2. httpブロックを調整するhttp { ... }セクションを探します。types_hash_max_sizetypes_hash_bucket_sizeという2つの特定のディレクティブを確認します。存在しない場合は手動で追加する必要があります。

エラーメッセージでNginxが提案した数値をそのまま使わないでください。来週また同じ問題に戻らないよう、値を2倍にしておきましょう。エラーが1024と64を提案した場合、以下の値を使います:

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

    # パフォーマンス向上のためハッシュテーブルサイズを増やす
    types_hash_max_size 2048;
    types_hash_bucket_size 128;

    # ... 既存の設定
}

3. 保存して終了するNanoを使用している場合は、Ctrl + Oを押してからEnterで保存します。Ctrl + Xでターミナルに戻ります。

変更を確認する構文をテストせずにNginxを再起動することは絶対に避けてください。小さなタイプミスでサイト全体がオフラインになる可能性があります。

sudo nginx -t

すべて正しければ、出力は次のようになります:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

次に、新しい設定を適用するためにサービスをリロードします:

sudo systemctl reload nginx

詳細解説:各パラメータの役割- types_hash_max_size: ハッシュテーブル全体のサイズを制御します。MIMEタイプ用に利用可能なスロットの総数と考えてください。- types_hash_bucket_size: 各スロット(バケット)のサイズを表します。CPUのキャッシュラインサイズに合わせた2の累乗(32、64、128)である必要があります。ファイル拡張子が非常に長い場合、Nginxはそれらを格納するためにより大きなバケットを必要とします。## メンテナンスのプロヒントこの警告は通常「一度設定したら忘れてよい」修正です。ただし、多数のサーバーを管理している場合、一貫性が重要です。手動編集や自動デプロイ中に設定が壊れてしまうケースをよく見かけます。

mime.typesnginx.confが誤って変更されていないことを確認するために、チェックサムの生成をお勧めします。ToolCraftのHash Generatorなどのツールが役立ちます。ブラウザ上で設定ファイルのMD5またはSHA-256ハッシュを素早く生成できます。機密データを第三者のサーバーにアップロードすることなく、クラスター内のすべてのサーバーが同一の設定で動作していることを確認するシンプルな方法です。 まだ警告が表示される場合も焦らないでください。非常に大きな設定では、さらに大きな値が必要な場合があります。値を再び2倍にして4096と256にしても安全です。現代のサーバーは十分なRAMを搭載しており、ここでのメモリへの影響はメガバイトではなくキロバイト単位です。

Related Error Notes