NginxでWordPressサイトにBasic認証を導入する手順書





NginxでWordPressサイトにBasic認証を導入する手順書


🔐 NginxでWordPressサイトにBasic認証を導入する手順書

📖 概要

本手順書では、NginxでホストしているWordPressサイトにBasic認証を設定する方法について説明します。Basic認証を導入することで、サイトへのアクセスを制限し、セキュリティを向上させることができます。

📝 注意事項:
Basic認証はHTTPS環境での使用を強く推奨します。HTTP環境では認証情報が平文で送信されるため、セキュリティ上のリスクがあります。

⚙️ 前提条件

  • Nginxがインストールされ、WordPressが動作していること
  • サーバーへのroot権限またはsudo権限があること
  • 基本的なLinuxコマンドの知識があること
  • Nginxの設定ファイルの場所を把握していること

🚀 導入手順

① パスワードファイルの作成

apache2-utilsのインストール

htpasswdコマンドを使用するために、apache2-utilsパッケージをインストールします。

# Ubuntu/Debian系
sudo apt update
sudo apt install apache2-utils

# CentOS/RHEL系
sudo yum install httpd-tools
# または
sudo dnf install httpd-tools

初回ユーザーの作成

最初のユーザーを作成します(-cオプションで新規ファイル作成):

sudo htpasswd -c /etc/nginx/.htpasswd username1

パスワードの入力を求められるので、安全なパスワードを設定してください。

追加ユーザーの作成

2人目以降のユーザーを追加する場合は、-cオプションを付けずに実行します:

sudo htpasswd /etc/nginx/.htpasswd username2

パーミッションの設定

Nginxプロセスが.htpasswdファイルを読み取れるようにパーミッションを設定します:

sudo chown root:nginx /etc/nginx/.htpasswd
sudo chmod 640 /etc/nginx/.htpasswd

② Nginx設定ファイルを編集

/etc/nginx/conf.d/default.conf またはサイト固有の設定ファイルを編集します:

server {
listen 80;
server_name example.com;

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

# Basic認証の設定
auth_basic “Restricted Area”; # 認証ポップアップに表示されるメッセージ
auth_basic_user_file /etc/nginx/.htpasswd; # パスワードファイルのパス

# WordPressのパーマリンク設定
location / {
try_files $uri $uri/ /index.php?$args;
}

# PHP処理の設定(WordPressに必要)
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # PHP-FPMのバージョンに合わせて調整
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

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

# .htaccessなどの隠しファイルへのアクセス拒否
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}

# xmlrpc.phpへのアクセス制限(DDoS対策)
location = /xmlrpc.php {
deny all;
}
}

⚠️ WordPressに特化した注意点:

  • try_files $uri $uri/ /index.php?$args; – WordPressのパーマリンク機能に必要
  • try_files $uri =404; – PHPファイルの直接実行を防ぐセキュリティ対策
  • fastcgi_split_path_info – PATH_INFOを正しく処理するために必要
  • PHP-FPMのソケットパスは環境に応じて調整してください(php7.4, php8.0, php8.1など)
  • wp-adminディレクトリのみを保護したい場合は、locationブロックを個別に設定することも可能です
  • xmlrpc.phpはDDoS攻撃の対象になりやすいため、使用しない場合はブロック推奨

③ 設定テストと再起動

設定ファイルの構文をチェックし、問題がなければNginxを再起動します:

sudo nginx -t
sudo systemctl reload nginx

エラーが出力された場合は、設定ファイルを再確認してください。

④ 動作確認

ブラウザでサイトにアクセスして、Basic認証ダイアログが表示されることを確認します:

http://example.com/

認証ダイアログが表示され、正しいユーザー名とパスワードでログインできれば設定完了です。

🧱 応用例

一部のディレクトリだけ保護したい場合

location /admin/ {
auth_basic “Admin Only”;
auth_basic_user_file /etc/nginx/.htpasswd;
try_files $uri $uri/ /index.php?$args;
}

IP制限と組み合わせる

location /admin/ {
allow 192.168.1.0/24;
deny all;

auth_basic “Restricted”;
auth_basic_user_file /etc/nginx/.htpasswd;
try_files $uri $uri/ /index.php?$args;
}

WordPressの管理画面のみ保護

# wp-adminディレクトリの保護
location /wp-admin/ {
auth_basic “WordPress Admin”;
auth_basic_user_file /etc/nginx/.htpasswd;
try_files $uri $uri/ /index.php?$args;
}

# wp-login.phpの保護
location = /wp-login.php {
auth_basic “WordPress Login”;
auth_basic_user_file /etc/nginx/.htpasswd;

try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

❌ よくあるエラー

現象 原因・対処法
401 Unauthorizedが出ない 設定ファイルに auth_basic が有効になっていない。設定の再読み込みを確認。
常に401になる .htpasswd のパスやパーミッションが誤り(nginxユーザーが読めるか確認)
特定の場所で効かない location の優先順位(prefix / regex)を見直す
WordPressが正常に動作しない try_files ディレクティブやPHP処理の設定を確認
ファイルが見つからないエラー .htpasswdファイルのパスが正しいか、ファイルが存在するか確認

🛡️ セキュリティに関する補足

重要なセキュリティ考慮事項:

  • HTTPS必須: Basic認証は必ずHTTPS環境で使用してください
  • 強固なパスワード: 推測されにくい複雑なパスワードを設定してください
  • 定期的な見直し: アクセス権限とユーザー情報を定期的に見直してください
  • ログ監視: アクセスログを監視して不正なアクセス試行を検出してください
  • 二要素認証: より高いセキュリティが必要な場合は、Basic認証以外の方法も検討してください

追加のセキュリティ対策:

  • Fail2banを導入してブルートフォース攻撃を防ぐ
  • 特定のIPアドレスからのアクセスのみ許可する
  • VPN経由でのアクセスのみ許可する
  • 定期的にパスワードを変更する

📚 参考情報

📝 作成日: 2024年12月 | 対象: Nginx 1.18+ / WordPress 5.0+

本手順書は一般的な設定例です。環境に応じて適切に調整してください。

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