2026年10月11日

2026年10月11日

Nginx のインストール方法と初期設定|公式リポジトリ・基本設定・WordPress 用 server ブロックの最小構成

Nginx のインストールは、Debian / Ubuntu なら apt install nginx、RHEL 系なら dnf install nginx で入り、systemctl enable --now nginx で起動します。新しい版や安定した更新を受けたい場合は、OS 標準ではなく nginx.org の公式リポジトリを登録してから入れます。インストール後に行う初期設定は、設定ファイルの置き場所を把握し、nginx -t で確認してから反映する習慣を付けることが中心です。

結論を先にまとめます。

  • OS 標準のパッケージは版が古めですが OS の更新と一緒に管理できます。公式リポジトリは stable と mainline を選べ、Nginx の更新がそのまま届きます。
  • 設定は /etc/nginx/nginx.conf が起点で、サイトごとの server ブロックは conf.d/*.conf(公式パッケージ)か sites-available + sites-enabled(Debian 系の OS パッケージ)に置きます。
  • 変更のたびに nginx -t → systemctl reload nginx の順で反映します。
  • WordPress 用の server ブロックは、try_files でパーマリンクを index.php に渡し、.php を PHP-FPM へ送る 2 点が核です。
  • ファイアウォールで 80 番と 443 番を開け、HTTPS 化を済ませてから公開します。
Nginx の導入と初期設定の流れ。リポジトリを選んでインストール、起動と自動起動、設定ファイルの構造を把握、WordPress 用 server ブロックを書く、ファイアウォールと HTTPS

OS 標準パッケージと公式リポジトリの違い

項目 OS 標準パッケージ nginx.org 公式リポジトリ
版 OS のリリース時点の版に修正だけ当たる stable(安定版)か mainline(開発版)を選ぶ
更新 OS のセキュリティ更新と一緒 Nginx の更新がそのまま届く
設定の配置(Debian 系) sites-available / sites-enabled と conf.d conf.d/*.conf のみ
実行ユーザー(Debian 系) www-data nginx
追加モジュール OS のパッケージ(libnginx-mod-*) 公式の動的モジュールパッケージ(nginx-module-*)

Brotli や GeoIP2 など追加モジュールを使う予定があれば、モジュールが Nginx 本体と同じ版でビルドされている必要があるため、どちらのリポジトリで統一するかを最初に決めます(「Nginx で Brotli 圧縮を有効にする方法」)。

手順 1: インストールする

OS 標準パッケージ

# Debian / Ubuntu
sudo apt update && sudo apt install nginx
# RHEL 系(AlmaLinux / Rocky Linux)
sudo dnf install nginx

公式リポジトリ(Debian / Ubuntu)

nginx.org の Linux packages の手順です(2026年11月現在)。署名鍵を取り込み、リポジトリを登録し、公式パッケージを優先する設定を入れます。

sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring   # Debian は debian-archive-keyring
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

表示される指紋が公式ページに載っている 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 と一致することを確認してから進めます。

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] https://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | sudo tee /etc/apt/preferences.d/99nginx
sudo apt update && sudo apt install nginx

Debian は URL を https://nginx.org/packages/debian に、mainline を使うなら https://nginx.org/packages/mainline/ubuntu(または /debian)に置き換えます。

公式リポジトリ(RHEL 系)

/etc/yum.repos.d/nginx.repo を作ります。公式ページの記載どおり、stable が有効、mainline は無効の状態です。

[nginx-stable]
name=nginx stable repo
baseurl=https://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
sudo dnf install nginx

手順 2: 起動して確認する

sudo systemctl enable --now nginx
systemctl status nginx --no-pager
nginx -v
curl -I http://127.0.0.1/

HTTP/1.1 200 OK と Server: nginx が返れば動いています。操作は systemctl start | stop | reload | restart nginx で行います。reload は設定の再読み込みで接続を切りません。Nginx 自体のコマンドでは nginx -s reload(再読み込み)、nginx -s quit(接続を待って終了)が同じ役割です(Beginner's Guide)。

手順 3: 設定ファイルの構造を把握する

設定の起点は /etc/nginx/nginx.conf です。公式ドキュメントの説明では、設定はディレクティブ(名前 値;)とコンテキスト({ } で囲まれたブロック)で構成され、events と http が最上位、server は http の中、location は server の中に置きます。

/etc/nginx/
├── nginx.conf          # 全体設定。http { include /etc/nginx/conf.d/*.conf; } を含む
├── conf.d/             # サイト別の server ブロック(公式パッケージはここだけ)
│   └── default.conf
├── sites-available/    # Debian 系 OS パッケージ。ここに書いて
├── sites-enabled/      # シンボリックリンクで有効化する
├── mime.types
└── snippets/           # Debian 系。fastcgi-php.conf など

最初に見ておく nginx.conf の項目は次のとおりです。

項目 意味 目安
user ワーカーの実行ユーザー パッケージの既定のまま。PHP-FPM のユーザーと合わせる
worker_processes ワーカー数 auto(CPU コア数)
access_log / error_log ログの出力先 /var/log/nginx/
gzip テキスト系の圧縮 on にし、gzip_types に CSS / JS / JSON / SVG を追加
server_tokens 応答ヘッダーの版の表示 off(版を隠す)
client_max_body_size アップロード上限 WordPress のメディアに合わせて 64m など

公式パッケージでは conf.d/default.conf が既定のサイトです。自分のサイトを置くときは、このファイルを無効化(拡張子を変える)するか、中身を書き換えます。

手順 4: WordPress 用の server ブロックを書く

PHP-FPM が入っている前提です(Debian / Ubuntu は php8.3-fpm、RHEL 系は php-fpm。2026年11月現在の例として PHP 8.3 で書いています)。/etc/nginx/conf.d/example.com.conf を作ります。

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com;
    index index.php index.html;

    access_log /var/log/nginx/example.com.access.log;
    error_log  /var/log/nginx/example.com.error.log;

    client_max_body_size 64m;

    # パーマリンクを index.php に渡す
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # PHP を PHP-FPM へ
    location ~ \.php$ {
        try_files $uri =404;
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # 静的ファイルのキャッシュ
    location ~* \.(css|js|jpe?g|png|gif|webp|svg|ico|woff2?)$ {
        expires 30d;
        access_log off;
    }

    # 触らせないファイル
    location ~ /\.(ht|git) { deny all; }
    location = /xmlrpc.php { deny all; }
    location ~* /wp-content/uploads/.*\.php$ { deny all; }
}

ポイントは 3 つです。try_files $uri $uri/ /index.php?$args が WordPress のパーマリンクを成り立たせます。location ~ \.php$ の try_files $uri =404 は、存在しない PHP ファイル名で別のファイルを実行させない対策です。uploads 配下の PHP を止める行は、アップロード機能を悪用した PHP の実行を防ぎます。

fastcgi_pass の値は環境に合わせます。ソケットのパスは php-fpm の www.conf の listen の値です。Nginx の実行ユーザーと PHP-FPM の listen.owner / listen.group が合っていないと 502 になります。

書いたら確認して反映します。

sudo nginx -t
sudo systemctl reload nginx

手順 5: ファイアウォールと HTTPS

# ufw(Ubuntu)
sudo ufw allow 'Nginx Full'      # 80 と 443
# firewalld(RHEL 系)
sudo firewall-cmd --permanent --add-service=http --add-service=https
sudo firewall-cmd --reload

RHEL 系で SELinux が有効なときは、ドキュメントルートのコンテキスト(httpd_sys_content_t)と、Nginx からネットワーク接続を許す httpd_can_network_connect が必要になる場面があります。

HTTPS 化は Certbot の Nginx プラグイン(certbot --nginx)で証明書の取得と server ブロックの書き換えが一度に済みます。公開前に済ませ、80 番は 443 番へ転送する設定にします。

WordPress の観点

Nginx には .htaccess がありません。Apache の共用サーバーから Nginx の VPS に移すと、プラグインが .htaccess に書いていた設定(リダイレクト、キャッシュ、アクセス制限)が効かなくなります。移行時は、.htaccess に何が書かれているかを先に読み、Nginx の location に書き直す作業を見積もりに含めてください。Apache と Nginx の向き不向きは「Apache と Nginx の違いと選び方」で扱っています。

また、PHP の版は Nginx ではなく PHP-FPM 側で決まります。WordPress が要求する PHP の版を満たしているかは「WordPress の PHP バージョンを確認する方法」で確認できます。

よくある質問

apt で入る Nginx と公式リポジトリの Nginx はどちらがよいですか

OS のサポート期間中は OS 標準でも修正は届きます。新しい機能(HTTP/3 など)や公式の動的モジュールを使いたいなら公式リポジトリです。混ぜると追加モジュールの版が合わなくなるので、どちらかに決めます。

502 Bad Gateway が出ます

Nginx は動いていて PHP-FPM に届いていない状態です。systemctl status php8.3-fpm で PHP-FPM が動いているか、fastcgi_pass のソケットのパスが www.conf の listen と一致しているか、ソケットの所有者が Nginx の実行ユーザーから接続できるかを確認します。/var/log/nginx/error.log に connect() to unix:... failed と理由が出ます。

sites-enabled が無いのですが

公式リポジトリのパッケージには sites-available / sites-enabled の仕組みはありません。conf.d/ に .conf ファイルを置けば nginx.conf の include で読み込まれます。

設定を変えたのに反映されません

nginx -t を通したあとに systemctl reload nginx を実行しているかを確認します。nginx -t でエラーがあると reload は古い設定のまま動き続けます。有効になっている設定全体は nginx -T で出力できます。

まとめ

  • Nginx のインストールは OS 標準パッケージか nginx.org の公式リポジトリから行い、追加モジュールの予定があるならどちらかに統一します。
  • 設定は nginx.conf → conf.d/*.conf(または sites-enabled)の構造で、変更は nginx -t → systemctl reload nginx の順に反映します。
  • WordPress 用の server ブロックは try_files と PHP-FPM への fastcgi_pass が核で、uploads 配下の PHP と xmlrpc.php は止め、公開前に 80/443 の開放と HTTPS 化を済ませます。

関連記事

参考: nginx – Linux packages、nginx – Beginner's Guide、nginx – Core functionality、WordPress Developer Resources – Nginx

更新履歴: 2026-11-09 全面改訂(定型文を公式リポジトリの導入手順・設定ファイルの構造・WordPress 用 server ブロックの最小構成に書き換え、502 やモジュールの版の注意を追加)。この記事はワードプレス博士(ライトセンド株式会社)が運営しています。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲