nginxで大量の静的ファイルを低スペックサーバーから配信する設定

数十万〜百万件の静的HTMLを1CPU/1GBメモリ級のサーバーで配信する場合、open_file_cacheと事前圧縮が効く。設定の勘所を整理する。

ファイルディスクリプタキャッシュ

open_file_cacheでfdとstat結果をキャッシュするとディスクアクセスが激減する。max値はメモリと相談し、1万〜数万から始める。

事前圧縮でCPUを守る

gzip_static onを有効化し、ビルド時に.gzを生成しておく。リクエストごとの圧縮処理が消え、1CPUでも同時接続を捌ける。

ディレクトリ分割

1ディレクトリに数十万ファイルを置くとファイルシステムの探索が遅くなる。ハッシュ先頭2文字などで階層を分けるのが定石。