主机迷主机迷

nginx配置basic认证保护网站后台地址

有时候为了安全,希望可以在访问wordpress、typecho等博客网站后台地址的时候,增加一道认证,要先输入用户名和密码,这时候可以使用nginx的basic认证。

利用apache所带的密码生成工具htpasswd

/usr/bin/htpasswd  -c /usr/local/nginx/conf/vhost/domain.com.pass  user

/usr/bin/htpasswd -nb user passwd

然后将生成的内容复制到domain.com.pass。

以下的配置可以保护admin目录下的所有文件。如果你只设了/admin/,那么直接输入/admin/index.php还是可以访问的。

location ~ ^/admin/.* {
    include enable-php.conf;

    auth_basic "auth";
    auth_basic_user_file /usr/local/nginx/conf/vhost/domain.com.pass;
}

location ~ /admin(/.*) {
    include enable-php.conf;

    auth_basic "auth";
    auth_basic_user_file /usr/local/nginx/conf/vhost/domain.com.pass;
}

有两个注意事项。第一个是匹配后台admin路径的location要放到include enable-php.conf;的前面,如果放到后面了,由于enable-php.conf里有php正则匹配,类似/admin/login.php这种以php为后缀的url会优先走location ~ php而不是优先走location ~ admin,这样就不会进行basic认证了。第二个是location ~ admin里面要添加include enable-php.conf,因为类似/admin/login.php这种url进行basic认证后也是要通过fastcgi方式跑php的,如果不加include enable-php.conf就会直接当作文件下载了。
以下的写法不行,basic认证通过后访问后台网页会直接下载。

location ^~ /admin/ {
   auth_basic "auth";
   auth_basic_user_file /usr/local/nginx/conf/vhost/domain.com.pass;
}

注意wordpress的/wp-admin和/wp-login.php都需要保护。

除了某个文件以外,其他内容都启用HTTP基本验证的例子:

location = /test {
       auth_basic off;
       allow all; 
}
转载请注明出处 | 当前页面:主机迷 » nginx配置basic认证保护网站后台地址

评论

  • 请输入 5 + 8 = ? 的计算结果: