主机迷主机迷

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认证保护网站后台地址

评论 2

  • 请输入 1 + 1 = ? 的计算结果:
  1. 博主你好,按照你的教程,在nginx.conf下添加的代码如下:
    location ~ ^/box/.* {
    auth_basic "Auth Login";
    auth_basic_user_file /usr/local/nginx/conf/vhost/auth/admin.pass;
    }
    我没有添加include enable-php.conf;这句,测试,访问https://domain/box时,会弹出输入框,但是我直接加上index.php的话,就不需要输入账户密码了。
    随后又把第一句改成
    location ~ /box(/.*) {
    测试,依然跟上面的情况一样。
    不知道我是出错在哪里?

    weeper 2019-07-01    回复
    • 与代码所在位置的先后顺序有关,要把你的location代码放到include enable-php.conf的前面,如果放后面了,就会优先匹配enable-php.conf里的location ~ [^/]\.php(/|$)而不是匹配你的location代码。

      主机迷 2019-07-24    回复