2026年5月23日

2026年5月23日

NginxでWordPressを動かす設定方法

はじめに

NginxにWordPressをインストールしたらカスタムパーマリンクが404エラーになる・PHP-FPMとNginxの連携設定がわからない・WordPressの管理画面にアクセスできない・セキュリティ上の設定をどうすればいいかわからないといった問題の解決方法を解説します。

症状・原因

  • パーマリンクを「投稿名」などに変更すると記事ページが404エラーになる(try_filesの設定不足)
  • wp-adminwp-login.phpにアクセスするとエラーが返る(locationブロックの設定漏れ)
  • php8.x-fpmとの接続設定(fastcgi_passのソケットパス)が間違っている
  • wp-content/uploads/内のPHPファイルが実行されてしまうセキュリティリスクがある

解決手順

ステップ1:前提条件を確認する

# ✅ PHP-FPM のインストール確認
sudo apt install php8.2-fpm php8.2-mysql php8.2-curl php8.2-gd \
    php8.2-mbstring php8.2-xml php8.2-zip -y

# ✅ PHP-FPM のソケットパスを確認
ls /run/php/
# → php8.2-fpm.sock ← このパスを fastcgi_pass に指定

# ✅ PHP-FPM の起動確認
sudo systemctl status php8.2-fpm
sudo systemctl enable php8.2-fpm

# ✅ WordPress ファイルの所有者を設定
sudo chown -R www-data:www-data /var/www/html
sudo find /var/www/html -type f -exec chmod 644 {} \;
sudo find /var/www/html -type d -exec chmod 755 {} \;

ステップ2:WordPress 用 Nginx 設定ファイルを作成する

# ✅ /etc/nginx/sites-available/wordpress.conf

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

    # HTTP → HTTPS リダイレクト
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com www.example.com;

    root /var/www/html;
    index index.php;

    # SSL 証明書
    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include snippets/ssl-params.conf;

    # ✅ WordPress パーマリンク対応(必須)
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # ✅ PHP-FPM 処理
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_read_timeout 300;
    }

    # ✅ セキュリティ: 隠しファイルへのアクセスを拒否
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }

    # ✅ セキュリティ: wp-config.php へのアクセスを拒否
    location = /wp-config.php {
        deny all;
    }

    # ✅ セキュリティ: xmlrpc.php へのアクセスを拒否
    location = /xmlrpc.php {
        deny all;
        access_log off;
        log_not_found off;
    }

    # ✅ セキュリティ: uploads ディレクトリでの PHP 実行を禁止
    location ~* /uploads/.*\.php$ {
        deny all;
    }

    # ✅ 静的ファイルのキャッシュ
    location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|woff2)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
        log_not_found off;
    }
}

ステップ3:設定を有効化して確認する

# ✅ 設定ファイルを有効化
sudo ln -s /etc/nginx/sites-available/wordpress.conf \
    /etc/nginx/sites-enabled/

# ✅ デフォルト設定を無効化(必要な場合)
sudo rm /etc/nginx/sites-enabled/default

# ✅ 構文チェック
sudo nginx -t
# → nginx: configuration file /etc/nginx/nginx.conf test is successful

# ✅ 設定を反映
sudo systemctl reload nginx

# ✅ WordPress のパーマリンクを確認
curl -sI http://example.com/sample-post/
# → HTTP/2 200 ← パーマリンクが動作している

# ✅ PHP が動作しているか確認
curl http://example.com/wp-admin/
# → HTTP/2 302 ← ログインページにリダイレクト

ステップ4:WordPress の管理画面設定を調整する

# ✅ wp-config.php に Nginx 用の設定を追加
sudo nano /var/www/html/wp-config.php
// ✅ HTTPS を強制(Nginx + SSL の場合)
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
    $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
}

// ✅ WordPress のサイト URL を設定
define('WP_HOME',    'https://example.com');
define('WP_SITEURL', 'https://example.com');

// ✅ 自動更新のためのファイル書き込み権限
define('FS_METHOD', 'direct');
# ✅ WordPress 管理画面でパーマリンクを再保存
wp rewrite flush --hard --path=/var/www/html/

# ✅ エラーログを確認
sudo tail -f /var/log/nginx/error.log

ステップ5:FastCGI キャッシュで高速化する

# ✅ /etc/nginx/nginx.conf の http ブロックに追加
fastcgi_cache_path /var/cache/nginx/wordpress
    levels=1:2
    keys_zone=WORDPRESS:100m
    inactive=60m
    max_size=1g;

# ✅ /etc/nginx/sites-available/wordpress.conf に追加
fastcgi_cache_key "$scheme$request_method$host$request_uri";

map $request_uri $skip_cache {
    default 0;
    ~*/wp-admin  1;  # 管理画面はキャッシュしない
    ~*/wp-login  1;  # ログイン画面はキャッシュしない
}

server {
    # ...
    set $no_cache 0;

    # ログイン済みユーザーはキャッシュを使わない
    if ($http_cookie ~* "wordpress_logged_in") {
        set $no_cache 1;
    }

    location ~ \.php$ {
        fastcgi_cache WORDPRESS;
        fastcgi_cache_valid 200 301 302 60m;
        fastcgi_cache_bypass $no_cache;
        fastcgi_no_cache $no_cache;
        add_header X-FastCGI-Cache $upstream_cache_status;
        # ... 他の fastcgi 設定
    }
}
# ✅ キャッシュディレクトリを作成
sudo mkdir -p /var/cache/nginx/wordpress
sudo chown www-data:www-data /var/cache/nginx/wordpress

# ✅ キャッシュが動作しているか確認
curl -sI https://example.com/ | grep X-FastCGI-Cache
# → X-FastCGI-Cache: HIT ← キャッシュヒット

注意事項

  • Nginxでは.htaccessは機能しません。WordPressのパーマリンクはtry_files $uri $uri/ /index.php?$args;の設定で対応します。管理画面の「設定 > パーマリンク」で保存ボタンをクリックしても.htaccessは生成されません
  • uploads/ディレクトリでのPHP実行を必ず禁止してください。アップロードされた悪意のあるPHPファイルが実行されるとサーバー全体が乗っ取られる可能性があります

まとめ

NginxでのWordPress設定は①PHP-FPMインストール・ソケットパス確認・www-dataでファイル所有権設定、②try_files $uri $uri/ /index.php?$argsでパーマリンク対応・fastcgi_pass unix:/run/php/php8.2-fpm.sockでPHP連携、③設定有効化・nginx -tで構文チェック・systemctl reloadcurlでパーマリンク確認、④wp-config.phpにHTTPS強制・WP_HOME/WP_SITEURL設定・FS_METHOD direct、⑤FastCGIキャッシュで高速化・管理画面・ログイン中ユーザーはキャッシュ除外・X-FastCGI-CacheヘッダーでHIT確認の手順で設定します。

お気軽にご相談ください

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