用nginx的auth_basic模块保护wordpress后台

查看nginx的log,有很多针对wp-login.php wp-admin的嗅探访问,网上想干坏事的人真是无处不在,还是把后台保护起来吧,断了那些坏银的念想。

google了一下,保护分两种,一种通过php实现,适合使用虚拟主机的用户,另一种通过nginx的auth_basic模块对后台进行密码保护。

两种办法都能起来保护后台的作用,相对来讲,肯定是后一种的性能更好一点,nginx的负载能力特NB的。前一种更方便,但经过PHP处理性能会相对差一点。

我因为用VPS,所以选择第二种,下面两种办法都说一下。

PHP办法:

修改当前主题的functions.php文件

//保护后台登录
add_action('login_enqueue_scripts','login_protection');  
function login_protection(){  
    if($_GET['word'] != 'press')header('Location: https://yourdomain/');  
}

加入以上代码之后,你的后台登陆地址就变成https://yourdomain/wp-login.php?word=press,可以把以上代码的word和press改为你喜欢的任意字符,比如

if($_GET['坏人'] != '滚开')header('Location: https://yourdomain/');

,那么你的后台登陆地址就变成 https://yourdomain/wp-login.php?坏人=滚开,直接访问https://yourdomain/wp-login.php将被重定向的https://yourdomain/(你的首页)。

这个办法有一个缺点,你每次更改主题或升级主题都要重新修改一遍。

 

nginx办法:

先生成加密的密码文件,可以到这里生成,加密方式选crypt,输入你想要的用户名和密码,点生成,把结果输出到 /usr/local/nginx/conf/passwd (你也可以自定义路径,改后auth_basic_user_file的路径要相应改变)。

或者直接用openssl生成,输入如下命令

echo "user:`openssl passwd -crypt yourpasswd`" > /usr/local/nginx/conf/passwd

在server里加入如下设置

location ~ /wp-login\.php  {
location ~ .*\.(php|php5)?$
    {
        fastcgi_pass unix:/tmp/php-cgi.sock;
        fastcgi_index index.php;
        include fascgi.conf;
    }
  auth_basic            "Restricted";
  auth_basic_user_file  passwd;
}

以上为通用设置,加入php解析项,要不会直接下载wp-login.php

我的服务器环境为军哥的LNMP1.4,在server项的 include enable-php.conf; 后加入如下设置就可以了

location = /wp-login.php  {
        auth_basic           "Restricted";
        auth_basic_user_file  passwd;
        fastcgi_pass unix:/tmp/php-cgi.sock;
        fastcgi_index wp-login.php;
        include fastcgi.conf;
}

搞定后重启nginx,访问后台看下效果~要求认证了,输入用户名密码,成功进行后台,OK!
看下log情况怎么样
nginx log
嗅探访问全部被返回401了~
Done~

用nginx的auth_basic模块保护wordpress后台》上有2条评论

    1. skywing 文章作者

      搬瓦工其实还好,只是CPU限制恶心了点。但这一点也保证了它的高可用性,事物都有两面性,就看你怎么看待。

评论已关闭。