🔐 NginxでWordPressサイトにBasic認証を導入する手順書
📖 概要
本手順書では、NginxでホストしているWordPressサイトにBasic認証を設定する方法について説明します。Basic認証を導入することで、サイトへのアクセスを制限し、セキュリティを向上させることができます。
Basic認証はHTTPS環境での使用を強く推奨します。HTTP環境では認証情報が平文で送信されるため、セキュリティ上のリスクがあります。
⚙️ 前提条件
- Nginxがインストールされ、WordPressが動作していること
- サーバーへのroot権限またはsudo権限があること
- 基本的なLinuxコマンドの知識があること
- Nginxの設定ファイルの場所を把握していること
🚀 導入手順
① パスワードファイルの作成
apache2-utilsのインストール
htpasswdコマンドを使用するために、apache2-utilsパッケージをインストールします。
sudo apt update
sudo apt install apache2-utils
# CentOS/RHEL系
sudo yum install httpd-tools
# または
sudo dnf install httpd-tools
初回ユーザーの作成
最初のユーザーを作成します(-cオプションで新規ファイル作成):
パスワードの入力を求められるので、安全なパスワードを設定してください。
追加ユーザーの作成
2人目以降のユーザーを追加する場合は、-cオプションを付けずに実行します:
パーミッションの設定
Nginxプロセスが.htpasswdファイルを読み取れるようにパーミッションを設定します:
sudo chmod 640 /etc/nginx/.htpasswd
② Nginx設定ファイルを編集
/etc/nginx/conf.d/default.conf またはサイト固有の設定ファイルを編集します:
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;
}
}
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 systemctl reload nginx
エラーが出力された場合は、設定ファイルを再確認してください。
④ 動作確認
ブラウザでサイトにアクセスして、Basic認証ダイアログが表示されることを確認します:
認証ダイアログが表示され、正しいユーザー名とパスワードでログインできれば設定完了です。
🧱 応用例
一部のディレクトリだけ保護したい場合
auth_basic “Admin Only”;
auth_basic_user_file /etc/nginx/.htpasswd;
try_files $uri $uri/ /index.php?$args;
}
IP制限と組み合わせる
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の管理画面のみ保護
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+
本手順書は一般的な設定例です。環境に応じて適切に調整してください。


