LoginSignup
0
1

More than 1 year has passed since last update.

[WordPress][Nginx] パスワード付き記事に対応しつつ WordPress 管理画面にBASIC認証を設定する

Last updated at Posted at 2022-03-31

WordPress 管理画面に BASIC 認証を設定するときは、以下のように設定していました。
( PHP は http://backend で動いているプロセスにリバースプロキシしているものとします )

    location = /wp-login.php {
        # BASIC 認証
        auth_basic    "Secret Area";
        auth_basic_user_file  "/etc/nginx/conf.d/.htpasswd";

        proxy_no_cache     1;
        proxy_cache_bypass 1;
        proxy_redirect     off;
        proxy_pass http://backend;
    }

    location ~* /wp-admin/(?!(admin\-ajax\.php|css/|js/|images/)).*$ {
        index index.php index.html index.htm;

        # BASIC 認証
        auth_basic    "Secret Area";
        auth_basic_user_file  "/etc/nginx/conf.d/.htpasswd";

        proxy_no_cache     1;
        proxy_cache_bypass 1;
        proxy_redirect     off;
        proxy_pass http://backend;
    }

ただ、これだと WordPress でパスワード保護された記事を書いた時にも BASIC 認証のダイアログが表示されてしまいます。

パスワード保護された記事を開くためには、WordPress では /wp-login.php?action=postpass に対して POST します。
そのため /wp-login.php に BASIC 認証がかかっていると、パスワード保護された記事を表示することができなくなってしまうのです。

そこで、以下のように変更し、 クエリストリングに ?action=postpass があるときは BASIC 認証を無効にするように設定しました。

    location = /wp-login.php {
        # BASIC 認証
        set $auth "Secret Area";
        if ( $arg_action = "postpass" ) {
        	set $auth off;
        }
        auth_basic    $auth;
        auth_basic_user_file  "/etc/nginx/conf.d/.htpasswd";

        proxy_no_cache     1;
        proxy_cache_bypass 1;
        proxy_redirect     off;
        proxy_pass http://backend;
    }

参考URL: wp-login.phpにベーシック認証をかけつつ「パスワード保護」を利用する

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1