WordPress の管理画面にアクセス制限をかけたい

WordPress の管理画面にアクセス制限をかける場合は以下のファイル・ディレクトリを対象とします。

  • /wp-login.php
  • /wp-admin/ ※ただし admin-ajax.php を除く

網元AMIで使用している Nginx では .htaccess が使えませんので、 /etc/nginx/conf.d/default.conf(または /etc/nginx/conf.d/example.com.conf )を編集します。

このファイルは root ユーザーのみが変更出来ますので、以下のようなコマンドでroot ユーザへ切り替えをしてください。

$sudo su -

  

/etc/nginx/conf.d/default.conf の抜粋

server {
    listen      80 default;
    server_name _;
    root        /var/www/vhosts/example.com;
    index       index.html index.htm;
    charset     utf-8;

    access_log  /var/log/nginx/example.com.access.log  main;
    error_log   /var/log/nginx/example.com.error.log;

    include     /etc/nginx/drop;

    rewrite /wp-admin$ $scheme://$host$uri/ permanent;
    #rewrite ^(.*)(index|home|default)\.html? $1 permanent;

    set $mobile '';
    #include /etc/nginx/mobile-detect;

    location ~* ^/wp-(content|admin|includes) {
        index   index.php index.html index.htm;
        if ($request_filename ~ .*\.php) {
            break;
            proxy_pass http://backend;
        }
        include /etc/nginx/expires;
    }

    #location ~* \.(js|css|html?|xml|gz|jpe?g|gif|png|swf|wmv|flv|ico)$ {
    #    index   index.html index.htm;
    #    include /etc/nginx/expires;
    #}

    location / {
        if ($request_filename ~ .*\.php) {
            break;
            proxy_pass http://backend;
        }
        include /etc/nginx/expires;

        set $do_not_cache 0;
        if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {
            set $do_not_cache 1;
        }
        if ($request_method = POST) {
            set $do_not_cache 1;
        }
        proxy_no_cache     $do_not_cache;
        proxy_cache_bypass $do_not_cache;

        proxy_redirect     off;
        proxy_cache        czone;
        proxy_cache_key    "$scheme://$host$request_uri$mobile";
        proxy_cache_valid  200 0m;
        proxy_pass http://backend;
    }

    #
    # When you use phpMyAdmin, uncomment the line "include /etc/nginx/phpmyadmin;"
    # and delete or comment out the below line "location ~* /(phpmyadmin|myadmin|pma) { }".
    #
    #include     /etc/nginx/phpmyadmin;
    location ~* /(phpmyadmin|myadmin|pma) {
        access_log off;
        log_not_found off;
        return 404;
    }

    #
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

 

IPアドレスで制限する場合

18行目(location で始まる行の前)あたりに以下のコードを追記してください

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

    # 許可するIPアドレスを記述
    allow 192.168.0.1;
    deny all;

    if ($request_filename ~ .*\.php) {
        break;
        proxy_pass http://backend;
    }
    include /etc/nginx/expires;
}

次のような組み合わせで許可するIPアドレスを追記してください。

allow 192.168.0.1;

 

Basic 認証で制限する場合

事前に .htpasswd を作成しておきます。
まず、SSHでインスタンスにログイン後、先ほどと同じように、sudo su - でルートユーザーに変更しておきます。

/etc/nginx/conf.d/.htpasswd を作成します。

Basic 認証のユーザー名を「wpbasic」としたい場合は

# htpasswd -c /etc/nginx/conf.d/.htpasswd wpbasic

と入力します。
コマンドが通ると新しいパスワードとそのパスワードの再入力を求められます。

New password:
Re-type new password:

成功すると Adding password for user wpbasic と表示されます。

成功したら、/etc/nginx/conf.d/default.conf (または /etc/nginx/conf.d/example.com.conf )の18行目(locationで始まる行の前)あたりに以下のコードを追記してください。

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

    # Basic認証のメッセージ
    auth_basic "Please enter your ID and password";
    # .htpasswd ファイルのパス
    auth_basic_user_file /etc/nginx/conf.d/.htpasswd;

    if ($request_filename ~ .*\.php) {
        break;
        proxy_pass http://backend;
    }
    include /etc/nginx/expires;
}

その後、設定を反映させるために以下のコマンドで Nginx を再起動してください。

# service nginx restart
他にご質問がございましたら、リクエストを送信してください

0 コメント

記事コメントは受け付けていません。
Powered by Zendesk