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 化を済ませてから公開します。
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 やモジュールの版の注意を追加)。この記事はワードプレス博士(ライトセンド株式会社)が運営しています。