動作確認環境
本記事のコマンドはすべて 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_connections が 768 のまま、server_tokens off がコメントアウト、さらに ssl_protocols に2022年に廃止勧告が出た TLSv1・TLSv1.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/ を実際に確認してみましょう。
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_processes・gzipなどはここで管理)。実測で 1446 バイトの小さなファイルでした/etc/nginx/sites-available/——バーチャルホスト設定ファイルを置いておく場所/etc/nginx/sites-enabled/——実際に有効なバーチャルホスト(sites-availableからのシンボリックリンク)
nginx.conf は末尾で include /etc/nginx/conf.d/*.conf; や include /etc/nginx/sites-enabled/*; と書いて、他の設定ファイルをまとめて読み込む構造になっています。

デフォルトの nginx.conf を全文確認する
では本題です。Ubuntu 24.04 に apt install nginx した直後の /etc/nginx/nginx.conf はこうなっていました。実際に Docker コンテナで cat した実出力です(コメント行は一部省略)。
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/*;
}

デフォルト設定の問題点を実測から整理する
Docker で確認した実測結果をもとに、変更を検討すべき3つのポイントを整理します。

①worker_connections が 768(推奨は 1024 以上)
Ubuntu 24.04 のデフォルトは worker_connections 768; でした。これは1つのワーカープロセスが同時に処理できる接続数の上限です。1サーバーの最大同時接続数は worker_processes × worker_connections でざっくり計算できます。
worker_processes は auto(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 を有効化する前後を比較してみました。
$ 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 が廃止を勧告した TLSv1・TLSv1.1 が含まれています。行末コメントの通り SSLv3 はすでに外されていますが、ここは TLSv1.2 TLSv1.3 のみに絞るのが今どきの推奨です。
Ubuntu 22.04 と 24.04 の nginx バージョン差
Ubuntu のバージョンによって、apt で入る nginx のパッケージバージョンが変わります。両方のコンテナで apt-cache policy nginx と nginx -v を実行した結果がこちらです。

$ 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 の値はサーバースペックに合わせて調整してください。
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 で構文チェックしたところ、問題なく通りました。

各パラメータの意味と変更理由
デフォルトから追加・変更した内容を表にまとめます。
| パラメータ | 設定値 | 変更理由・効果 |
|---|---|---|
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 が起動しなくなります。
$ 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 でブラウザからアクセスして撮影したものです。

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

ちなみにこの 404 ページの下部には nginx/1.31.1 のようにバージョンが表示されています(この画面は nginx 公式イメージで撮影しています)。これも server_tokens off を設定すると nginx だけの表示に変わります。エラーページからバージョンを推測されたくない場合も、やはり server_tokens off が効きます。
sites-available と sites-enabled の仕組み
Ubuntu の nginx では、バーチャルホストを sites-available に作成し、有効化したいものだけを sites-enabled にシンボリックリンクを貼る、という構造になっています。
$ 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 のエラーメッセージに行番号が表示されるので、その行を確認してください。
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 が同時に動いていることが多いです。
$ 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 6とgzip_typesを有効化して、CSS や JSON も圧縮対象にする- 設定変更後は
nginx -tで構文チェック →systemctl reload nginxで無停止反映
nginx の基本設定が固まったら、次のステップとして Let’s Encrypt による HTTPS 化やリバースプロキシ設定に挑戦してみてください。本格的に VPS でサーバーを運用したいなら、まずは自分の VPS を借りることから始めましょう。各社の料金やスペックを比較した記事も用意しています。
関連記事:VPS各社の料金・スペックを実測比較



コメント