WordPressのBasic認証を初心者にもわかりやすく解説:アクセス制限で安心をプラス

CMS開発

はじめに

WordPressを運営していると、外部から特定のページだけを一時的に見せたくない状況がありますよね。 たとえば開発中のテストサイトや限定公開のページがそれにあたるのではないでしょうか。 そこで登場するのがBasic認証という仕組みです。

Basic認証を設定しておくと、ユーザー名とパスワードによってアクセスを制御できます。 特にWordPressは利用者が多いため、あらかじめ対策を行うことで安心感が増すでしょう。 ところが、いざ設定しようとすると「どこにコードを書けばいいのか分からない」という声もあります。 そこで本記事では、初心者の皆さんにも伝わるように、なるべく具体的に手順を紹介していきます。

この記事を読むとわかること

  • Basic認証の概要とメリット
  • 実務での主なユースケース
  • Apache・Nginxでの設定手順と注意点

WordPressにおけるBasic認証の概要

WordPressの管理画面は初期設定でもログイン保護がありますが、ときには追加で認証をかけたい場面があります。 たとえば開発中のステージング環境を外部に見せる際、一般公開は避けたいけれど特定の人にだけアクセスしてもらいたいことがあります。 そんなとき、Basic認証を使うとユーザー名とパスワードを共有するだけで手軽にアクセス制限ができます。

「Basic」という名称からもわかるように、比較的シンプルな仕組みで動作します。 HTTPリクエストを送るときに、ブラウザがヘッダー情報に認証情報を付与し、サーバー側が正しいユーザー名・パスワードかどうかをチェックするイメージです。 個人ブログでも企業のサイトでもよく使われている方法なので、押さえておくと何かと便利でしょう。

ただし、Basic認証は暗号化されずに認証情報が送信されるため、できればHTTPS環境で運用したほうが安全です。 また、管理画面にログインするときにも二重で認証を求められるため、操作する側には少し手間がかかることを理解しておきましょう。

Basic認証のメリットとユースケース

Basic認証を導入するメリットは複数あります。 大規模なシステムでなくても、アクセス制限したい場面に合わせて使いやすいのがポイントではないでしょうか。

  • すぐに導入しやすい
  • 特定のページやフォルダ単位で保護が可能
  • WordPressの管理画面以外でも制限をかけられる

たとえば、大きめのプロジェクトでデザイン会社と共有するステージングサイトがありますよね。 そのサイトが一般の方に見つからないようにしたい場合、Basic認証を付けておけばURLを知られてもパスワードがないと入れません。 これはセキュリティ強化の面でも評価が高い方法といえます。

もうひとつのシーンとしては、メンテナンス中のサイトにアクセスが集中しないようにする場合があげられます。 画面が崩れている状態や未完成のコンテンツが外部に見えてしまうと誤解を招くかもしれません。 そこでBasic認証で一時的にブロックして、完成後に公開するという流れが考えられます。

Basic認証は重要情報への不正アクセスを完全に防ぐものではありませんが、他の認証と組み合わせると、少しずつセキュリティを高めることができます。

Apache環境でのBasic認証設定方法

WordPressをApacheで運用している場合、.htaccessファイルを使った方法がよく知られています。 初心者には少しハードルが高いと感じるかもしれませんが、ポイントを押さえれば難しくはないでしょう。

まず、Basic認証に必要なユーザー名・パスワードを管理するため、.htpasswdというファイルを作成します。 サーバー環境によってはコマンドを使わず、オンラインのツールなどで生成してからサーバーにアップロードしてもかまいません。

たとえばApache系のサーバーにSSH接続できる場合は、以下のようなコマンドを入力することがあります。 ただし、細かいオプション指定は環境によって異なるので、あくまでもひとつの例として見てください。

htpasswd -c /var/www/html/.htpasswd your-username

上記のコマンドを実行するとパスワードの入力が求められます。 入力したら、指定のパスに“.htpasswd”が生成されます。 次に、WordPressが設置されているディレクトリ(例:/var/www/html/など)にある“.htaccess”ファイルを編集し、Basic認証を適用するための記述を追加します。

AuthType Basic
AuthName "Restricted Area"
AuthUserFile /var/www/html/.htpasswd
require valid-user

上記の内容を追加保存したら、アクセスしたときにユーザー名とパスワードを求められるようになるでしょう。 設定後にブラウザでサイトURLを開き、認証画面が出れば成功です。 万一、サイト全体に適用されてしまい、管理画面の操作がしづらいときは、.htaccessのディレクトリ階層を調整するか、特定の場所のみ適用されるように工夫してください。

Nginx環境でのBasic認証設定方法

Nginxを使っている場合は、Apacheの.htaccessのような仕組みがありません。 その代わり、設定ファイルでBasic認証を有効にします。 こちらもユーザー名とパスワードを管理する“.htpasswd”ファイルが必要です。 Apacheと同じように、htpasswdコマンドなどを使って先に“.htpasswd”を作成しましょう。 生成後、そのファイルをサーバー上の安全な場所へアップロードしておきます。

続いて、Nginxの設定ファイル(例:/etc/nginx/conf.d/your-site.conf など)の中で、Basic認証の指定を追加します。 serverブロックやlocationブロックの中に次のような記述を入れることが一般的です。

location / {
    auth_basic "Restricted Area";
    auth_basic_user_file /var/www/html/.htpasswd;

    # WordPressの他の設定があればここに追記
    try_files $uri $uri/ /index.php?$args;
}

上記の“auth_basic”と“auth_basic_user_file”がポイントになります。 保存後、Nginxを再起動または設定の再読み込みを行うと認証が有効になります。 そのときにパスの指定を誤ると、認証が機能しないか、あるいは常に“401 Authorization Required”のエラーが出るかもしれません。 もしうまくいかない場合は、ファイルパスのスペルやNginxのエラーログを確認してみてください。

Nginxは、設定ファイルに少し書き込みが必要ですが、サーバーごとに設定を分けやすいメリットがあります。 開発環境やステージング環境だけBasic認証をかけるなど、柔軟に対応できるでしょう。

WordPressでのプラグイン利用によるBasic認証

WordPressはプラグインによってさまざまな機能を追加できます。 Basic認証もプラグインで実現しようと思えば、管理画面からインストール可能なものがあります。 設定画面でユーザー名・パスワードを入力するだけで、特定のディレクトリを保護してくれる場合もあるでしょう。

ただし、プラグインを使う場合、WordPressが動作するPHPレイヤーで認証をかける形になりがちです。 そのため、ApacheやNginxのアクセス段階で弾く方式とは動作タイミングが異なります。 あまり複雑なアクセス制限を求めないならば問題ありませんが、サーバー全体を守るという意味では.htaccessやNginxの設定のほうが幅広いケースに対応しやすいと考えられます。

また、プラグインはWordPress本体やテーマとの競合が起きる可能性もゼロではありません。 導入したところ、思いがけない画面遷移エラーが出ることもあるので、利用の際は注意しましょう。

プラグインで認証を行う場合、直接サーバーレベルで保護されるわけではないため、攻撃手法によっては回避される可能性があるかもしれません。

Basic認証で発生しがちなエラーと対策

Basic認証を導入した直後に、管理画面へのログインやサイト表示でエラーが出ることがあります。 よくあるのは「認証を通せずアクセス拒否になる」「画像やCSSが読み込まれない」といったものです。 こうした問題は設定ファイルのパス不備や、キャッシュの影響が考えられるでしょう。

まず確認したいのは、“.htpasswd”ファイルが正しい場所にあり、正しいパスで設定されているかどうかです。 記述ミスがあると、いくらパスワードを入れても先へ進めない状況になることがあります。 Nginxの場合は“auth_basic_user_file”のパス指定が間違っているケースが多いので、サーバーログを参照してみてください。

また、複数のディレクトリにBasic認証をかけている場合、ブラウザのキャッシュが混ざって意図しない動作が起こる場合があります。 一度ブラウザを完全にリフレッシュするか、シークレットモードを使ってアクセスしてみましょう。 さらにプラグイン経由でBasic認証をかけているときは、別のプラグインとの干渉を疑うことも大切です。

WordPressサイトで、Basic認証を設定するURLの範囲によっては画像が表示されないなどの不具合も起こりがちです。 管理画面とフロントページ、あるいは特定のサブディレクトリにだけかけたいならば、.htaccessやNginxの“location”設定を細かく分けるようにしましょう。 こうすることで、重要な部分だけを保護しつつ、表示したい要素は自由に公開できます。

まとめ

WordPressでBasic認証を導入するときは、Apacheであれば.htaccessと.htpasswd、Nginxであれば設定ファイルでの記述が重要になります。 実務では、ステージングサイトや限定公開ページの保護など、さまざまな場面で使いやすいのではないでしょうか。 導入方法そのものはシンプルですが、意図せずページ全体がブロックされてしまうなどのトラブルも起こる可能性があります。 そのため、ファイルパスの指定やプラグインとの相性には注意しておく必要があるでしょう。

プログラミング初心者の皆さんでも、ポイントを押さえれば導入自体は難しくありません。 サーバー全体でアクセス制限を行うか、WordPressのプラグインを使うかは運営スタイルに合わせて選んでみてください。 そうすると、WordPressサイトのセキュリティと運用のしやすさが、少しずつバランス良くなっていくはずです。

WordPressをマスターしよう

この記事で学んだWordPressの知識をさらに伸ばしませんか?
Udemyには、現場ですぐ使えるスキルを身につけられる実践的な講座が揃っています。