Ubuntuのnginx.conf設定を完全解説【パフォーマンス最適化】

設定

動作確認環境

本記事のコマンドはすべて ubuntu:24.04 Docker公式イメージで実際に実行し、実出力を確認しています(2026-06-15)。比較用に ubuntu:22.04 でも nginx のバージョンを確認済みです。レスポンスヘッダーの確認には、同じコンテナ内で nginx を起動して curl を実行しています。

nginx.conf って、結局どこを変えればパフォーマンスが上がるの?」——nginx をインストールしたばかりの方がまず戸惑うのが、この設定ファイルの読み方です。

結論から言うと、Ubuntu のデフォルト nginx.conf には、そのまま本番運用すると少し危ない設定が含まれています。実際に ubuntu:24.04 のコンテナで apt install nginx して /etc/nginx/nginx.conf を開いてみると、worker_connections768 のまま、server_tokens off がコメントアウト、さらに ssl_protocols に2022年に廃止勧告が出た TLSv1TLSv1.1 が残っている、という3箇所が見つかりました。

この記事では Ubuntu 24.04 のデフォルト nginx.conf を実際に読み解きながら、パフォーマンスとセキュリティの両面で最適化する設定を順番に解説します。server_tokens off を有効にした前後でレスポンスヘッダーがどう変わるかも、curl で実測した結果を載せます。

この記事のポイント

  • Ubuntu 24.04 のデフォルト nginx.conf には変更を検討すべき設定が3箇所ある(実測確認済み)
  • worker_connections のデフォルトは 768——多くのガイドが推奨する 1024 以上に増やす手順を解説
  • server_tokens off を有効にすると Server: nginx/1.24.0 (Ubuntu)Server: nginx に変わることを curl で実測
  • 設定変更後は必ず nginx -t で構文チェック → systemctl reload nginx でダウンタイムなしに反映
  • Ubuntu 22.04 は nginx 1.18.0、Ubuntu 24.04 は nginx 1.24.0(パッケージ実測)

nginx.conf の場所とディレクトリ構造

nginx のメイン設定ファイルは /etc/nginx/nginx.conf です。apt install nginx した直後の /etc/nginx/ を実際に確認してみましょう。




ubuntu@linuxlab: ~
$ ls -la /etc/nginx/
total 80
drwxr-xr-x 8 root root 4096 Jun 15 06:07 .
drwxr-xr-x 1 root root 4096 Jun 15 06:07 ..
drwxr-xr-x 2 root root 4096 Jun 9 11:45 conf.d
-rw-r–r– 1 root root 1125 Nov 30 2023 fastcgi.conf
-rw-r–r– 1 root root 5465 Nov 30 2023 mime.types
drwxr-xr-x 2 root root 4096 Jun 9 11:45 modules-enabled
-rw-r–r– 1 root root 1446 Nov 30 2023 nginx.conf
-rw-r–r– 1 root root 180 Nov 30 2023 proxy_params
drwxr-xr-x 2 root root 4096 Jun 15 06:07 sites-available
drwxr-xr-x 2 root root 4096 Jun 15 06:07 sites-enabled
drwxr-xr-x 2 root root 4096 Jun 15 06:07 snippets

覚えておきたいのは次の3つです。

  • /etc/nginx/nginx.conf ——全体のグローバル設定(worker_processesgzip などはここで管理)。実測で 1446 バイトの小さなファイルでした
  • /etc/nginx/sites-available/ ——バーチャルホスト設定ファイルを置いておく場所
  • /etc/nginx/sites-enabled/ ——実際に有効なバーチャルホスト(sites-available からのシンボリックリンク)

nginx.conf は末尾で include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*; と書いて、他の設定ファイルをまとめて読み込む構造になっています。

apt install nginx の実行ログと nginx -v(Ubuntu 24.04・実測)
apt install nginx の実行ログと nginx -v(Ubuntu 24.04・実測)

デフォルトの nginx.conf を全文確認する

では本題です。Ubuntu 24.04 に apt install nginx した直後の /etc/nginx/nginx.conf はこうなっていました。実際に Docker コンテナで cat した実出力です(コメント行は一部省略)。




ubuntu@linuxlab: ~
$ cat /etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log;
include /etc/nginx/modules-enabled/*.conf;

events {
worker_connections 768;
# multi_accept on;
}

http {
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
# server_tokens off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
gzip on;
# gzip_vary on;
# gzip_comp_level 6;
# gzip_types text/plain text/css application/json …;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Ubuntu 24.04 のデフォルト nginx.conf(実測・要注意箇所ハイライト)
Ubuntu 24.04 のデフォルト nginx.conf(実測・要注意箇所ハイライト)
著者アイコン
著者アイコン

正直、このデフォルト設定には「これで本番に出して大丈夫?」と思う箇所があります。特に ssl_protocols の行に TLSv1 TLSv1.1 が残っているのが気になります。行末に # Dropping SSLv3, ref: POODLE とコメントがあって SSLv3 は外してあるのですが、その後 2022年に RFC 8996 で TLSv1・TLSv1.1 も廃止勧告が出ているので、ここも一緒に消したいところです。

デフォルト設定の問題点を実測から整理する

Docker で確認した実測結果をもとに、変更を検討すべき3つのポイントを整理します。

nginx.conf 主要パラメータ:デフォルト値 vs 推奨値(実測)
nginx.conf 主要パラメータ:デフォルト値 vs 推奨値(実測)

①worker_connections が 768(推奨は 1024 以上)

Ubuntu 24.04 のデフォルトは worker_connections 768; でした。これは1つのワーカープロセスが同時に処理できる接続数の上限です。1サーバーの最大同時接続数は worker_processes × worker_connections でざっくり計算できます。

worker_processesauto(CPUコア数を自動検出)なので、たとえば2コアなら 2 × 768 = 1,536 接続が上限です。一般的には worker_connections を 1024 以上にすることが多く、VPS(1〜2 vCPU)なら 1024、高トラフィック環境なら 4096 を検討します。

②server_tokens がコメントアウト(バージョンが露出する)

デフォルトでは # server_tokens off; とコメントアウトされているため、実質 on の状態です。これはレスポンスヘッダーに nginx のバージョンが出てしまうということ。実際に nginx を起動して curl -I でヘッダーを確認し、server_tokens off を有効化する前後を比較してみました。




ubuntu@linuxlab: ~
# 有効化前(デフォルト)のレスポンスヘッダー
$ curl -sI http://localhost/ | grep -i ‘^Server:’
Server: nginx/1.24.0 (Ubuntu) ← バージョンが丸見え

# server_tokens off; を有効化して reload した後
$ curl -sI http://localhost/ | grep -i ‘^Server:’
Server: nginx ← バージョン非表示

このとおり、server_tokens off を入れると Server: nginx/1.24.0 (Ubuntu)Server: nginx に変わりました。バージョンが分かると攻撃者にとって「このバージョンに効く脆弱性」を探す手がかりになるので、本番では必ず off にしておきましょう。

③ssl_protocols に廃止済みの TLSv1/TLSv1.1 が含まれる

デフォルトの ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; には、2022年に RFC 8996 で IETF が廃止を勧告した TLSv1TLSv1.1 が含まれています。行末コメントの通り SSLv3 はすでに外されていますが、ここは TLSv1.2 TLSv1.3 のみに絞るのが今どきの推奨です。

Ubuntu 22.04 と 24.04 の nginx バージョン差

Ubuntu のバージョンによって、apt で入る nginx のパッケージバージョンが変わります。両方のコンテナで apt-cache policy nginxnginx -v を実行した結果がこちらです。

Ubuntu バージョン別 nginx パッケージ比較(実測)
Ubuntu バージョン別 nginx パッケージ比較(実測)



ubuntu@linuxlab: ~
# Ubuntu 22.04 で確認
$ nginx -v
nginx version: nginx/1.18.0 (Ubuntu)
$ apt-cache policy nginx
Installed: 1.18.0-6ubuntu14.14

# Ubuntu 24.04 で確認
$ nginx -v
nginx version: nginx/1.24.0 (Ubuntu)
$ apt-cache policy nginx
Installed: 1.24.0-2ubuntu7.11

Ubuntu 22.04 が nginx 1.18.0-6ubuntu14.14、Ubuntu 24.04 が nginx 1.24.0-2ubuntu7.11 でした。これから新しくサーバーを立てるなら、サポートも長く(2029年4月まで)、nginx も新しい Ubuntu 24.04 をおすすめします。

最適化した nginx.conf の完全サンプル

実測をもとに、VPS(1〜2コア)向けに最適化した nginx.conf を示します。このまま使えますが、worker_connections の値はサーバースペックに合わせて調整してください。




ubuntu@linuxlab: /etc/nginx
$ sudo nano /etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 1024;
    use epoll;
    multi_accept on;
}

http {
    ##
    # Basic Settings
    ##
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    server_tokens off;

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

    ##
    # SSL Settings(廃止済みプロトコルを除外)
    ##
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings
    ##
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings(コメントアウトを解除して有効化)
    ##
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types
        text/plain
        text/css
        text/xml
        application/json
        application/javascript
        application/rss+xml
        application/atom+xml
        image/svg+xml;

    ##
    # Virtual Host Configs
    ##
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

上の設定を実際に ubuntu:24.04 コンテナに書き込んで nginx -t で構文チェックしたところ、問題なく通りました。

最適化設定の nginx -t 実行結果(実測)
最適化設定の nginx -t 実行結果(実測)

各パラメータの意味と変更理由

デフォルトから追加・変更した内容を表にまとめます。

パラメータ 設定値 変更理由・効果
worker_connections 768 → 1024 1ワーカーあたりの同時接続数を増やす。VPS でも余裕を持って捌けるようにする
use epoll; (追加) Linux のイベント駆動 I/O モデル。多数の接続を効率的に処理する
multi_accept on; (コメントアウト解除) ワーカーが一度に複数の接続を受け付ける。高負荷時に効果的
tcp_nodelay on; (追加) 小さいパケットを即時送信し、keepalive 接続時のレイテンシを下げる
keepalive_timeout 65; (追加) 持続接続のタイムアウト。TCP ハンドシェイクのオーバーヘッドを削減
server_tokens off; (コメントアウト解除) レスポンスヘッダーからバージョン情報を削除(実測で nginx/1.24.0 (Ubuntu)nginx
ssl_protocols TLSv1.2 TLSv1.3 のみ 廃止済みの TLSv1・TLSv1.1 を除外。RFC 8996(2022年)に準拠
gzip_comp_level 6; (コメントアウト解除) 圧縮レベル1〜9のうち、6が CPU 負荷と圧縮率のバランスが良いとされる
gzip_types (コメントアウト解除) CSS・JSON・JavaScript など圧縮効果が大きい形式を明示的に指定

補足:gzip はデフォルトでも効いている

デフォルトでも gzip on; なので、HTML は圧縮されます。実際に curl -sI -H 'Accept-Encoding: gzip' http://localhost/ でウェルカムページを取得すると Content-Encoding: gzip が返りました。ただしデフォルトでは gzip_types が指定されていないため、CSS や JSON など text/html 以外は圧縮されません。上記のように gzip_types を追加することで、これらも圧縮対象になります。

設定の適用方法(nginx -t でチェック→リロード)

設定ファイルを変更したら、必ずこの順番で適用します。nginx -t を省略していきなりリロードするのは禁物です——設定エラーがあると最悪 nginx が起動しなくなります。




ubuntu@linuxlab: ~
# ① 構文チェック(必ずやる)
$ 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

# ③ 状態とリッスンポートの確認
$ service nginx status
* nginx is running
$ sudo ss -tlnp | grep :80
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:((“nginx”,pid=3241,fd=5))

注意:restart と reload の違い

sudo systemctl restart nginx は nginx を一度停止してから再起動するため、瞬間的なダウンタイムが発生します。設定変更を反映したいだけなら reload を使ってください。reload はワーカープロセスに新しい設定を読み込ませますが、処理中の既存接続は切断しません。

nginx デフォルトページをブラウザで確認する

nginx が正常に動いているか、ブラウザからも確認しましょう。サーバーの IP アドレスかドメインにアクセスすると、デフォルトのウェルカムページが表示されます。以下は実際に nginx 公式 Docker イメージを起動し、Playwright でブラウザからアクセスして撮影したものです。

nginx デフォルトウェルカムページ(Playwright 実撮影)
nginx デフォルトウェルカムページ(Playwright 実撮影)

「Welcome to nginx!」が表示されれば nginx は正常に動作しています。存在しないパスにアクセスすると、次のような 404 エラーページが返ります。

nginx デフォルト404エラーページ(Playwright 実撮影)
nginx デフォルト404エラーページ(Playwright 実撮影)

ちなみにこの 404 ページの下部には nginx/1.31.1 のようにバージョンが表示されています(この画面は nginx 公式イメージで撮影しています)。これも server_tokens off を設定すると nginx だけの表示に変わります。エラーページからバージョンを推測されたくない場合も、やはり server_tokens off が効きます。

sites-available と sites-enabled の仕組み

Ubuntu の nginx では、バーチャルホストを sites-available に作成し、有効化したいものだけを sites-enabled にシンボリックリンクを貼る、という構造になっています。




ubuntu@linuxlab: ~
# 新しいサイト設定を作成
$ sudo nano /etc/nginx/sites-available/mysite.conf

# sites-enabled にシンボリックリンクを作成して有効化
$ sudo ln -s /etc/nginx/sites-available/mysite.conf /etc/nginx/sites-enabled/

# 設定テストしてからリロード
$ sudo nginx -t && sudo systemctl reload nginx
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

無効化したいときは、リンクを sudo rm /etc/nginx/sites-enabled/mysite.conf で削除します(sites-available 側の実体は残るので、また使いたくなったら貼り直すだけです)。

よくあるエラーと解決策

①「nginx: [emerg] unknown directive」エラー

設定ファイルにタイポ(打ち間違い)があるパターンです。nginx -t のエラーメッセージに行番号が表示されるので、その行を確認してください。




ubuntu@linuxlab: ~
$ sudo nginx -t
nginx: [emerg] unknown directive “gzipp” in /etc/nginx/nginx.conf:37
nginx: configuration file /etc/nginx/nginx.conf test failed
# → 37行目の “gzipp” というタイポを “gzip” に直す

②「nginx: [warn] conflicting server name」警告

同じ server_name を持つ設定が複数存在しています。sites-enabled 内に古いリンクが残っていないか確認してください。

③systemctl reload で「Failed to reload」エラー

先に nginx -t を実行してください。設定エラーがある状態でリロードしようとしても失敗します。エラーを直してから再度 reload します。

④nginx が起動しない(Port 80 already in use)

別のプロセスがポート 80 を使っています。Apache が同時に動いていることが多いです。




ubuntu@linuxlab: ~
# ポート80を使っているプロセスを確認
$ sudo ss -tlnp | grep :80
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:((“apache2”,pid=1234,fd=4))
# → Apache が動いている場合は停止してから nginx を起動する
$ sudo systemctl stop apache2 && sudo systemctl start nginx

まとめ

Ubuntu の nginx.conf を実際に Docker コンテナで確認した結果をまとめます。

  • nginx バージョン:Ubuntu 22.04 は nginx/1.18.0(1.18.0-6ubuntu14.14)、Ubuntu 24.04 は nginx/1.24.0(1.24.0-2ubuntu7.11)(実測)
  • デフォルトの worker_connections は 768——余裕を持たせるなら 1024 以上に変更を推奨
  • server_tokens off; はコメントアウト状態——有効化すると Server: nginx/1.24.0 (Ubuntu)Server: nginx に変わるのを実測で確認
  • TLSv1・TLSv1.1 が有効——ssl_protocols TLSv1.2 TLSv1.3; に絞って廃止済みプロトコルを除去
  • gzip_comp_level 6gzip_types を有効化して、CSS や JSON も圧縮対象にする
  • 設定変更後は nginx -t で構文チェック → systemctl reload nginx で無停止反映

nginx の基本設定が固まったら、次のステップとして Let’s Encrypt による HTTPS 化やリバースプロキシ設定に挑戦してみてください。本格的に VPS でサーバーを運用したいなら、まずは自分の VPS を借りることから始めましょう。各社の料金やスペックを比較した記事も用意しています。

関連記事:VPS各社の料金・スペックを実測比較

コメント

タイトルとURLをコピーしました