一聚教程网:一个值得你收藏的教程网站

热门教程

nginx中目录加密与添加用户认证配置

时间:2022-06-30 18:40:56 编辑:袖梨 来源:一聚教程网


    有时候为了安全,我们不希望暴漏我们网站的后台地址,所以一般我们都把后台的地址隐藏。比如说一些开源的cms,如果是通过http://www.你的域名/admin.php?m=admin这样访问的话,我们一般把admin.php改成别的不容易被猜测的文件名,但是对于一些cms,则不能这样改,因为有很多地方用到了这个写死的路径,比如wordpress,后台访问的路径一般都是http://www.你的域名/wp-admin/或者http://www.你的域名/wp-login.php,wp-admin和wp-login.php又不方便改,改了就得改原程序文件,这样不方便升级,而且也不知道要改多少。

    所以,这个时候我们就希望可以在访问我们的后台的时候,要先输入用户名和密码,通过了认证才进入到后台地址。下面,我们来以nginx为例,说一下如何给某个目录添加用户名和密码的认证,通过用户名密码认证访问特定web站点目录,给后台目录加密。

    我们是通过nginx的 auth_basic 来实现的。所以我们需要在nginx的虚拟主机配置文件里面设置,对于使用虚拟主机的朋友,就没有办法了。拿wordpress为例说明,wordpress的后台地址是 http://www.你的域名/wp-admin/,还有登录页面  http://www.你的域名/wp-login.php  ,所以我们要对admin的文件目录加密,还是有wp-login.php路径加密。

    【1】设置密码文件。

    首先我们需要设置一个密码文件,密码是要经过htpasswd来生成,我们来个简单的,直接使用php来生成密码。新建一个php文件,输入代码

       //将代码中的两个 123 替换成您的访问密码

 代码如下 复制代码
echo crypt('123', base64_encode('123'));    //得到 MTTuFPm3y4m2o

    我们得到 一个字符串  MTTuFPm3y4m2o,这个字符串就是123加密之后的密钥。

    【2】在服务器上面的/home/mypwd/目录下新建一个文件 pass 的文件,用户名是 test,密码是123

 代码如下 复制代码
cd /home/mypwd/
vi pass

[/php]

    在打开的文件里面输入

 代码如下 复制代码
test:MTTuFPm3y4m2o

 
    test就是用户名,然后就是一个冒号:,然后就到123加密得到的密钥

    然后退出并保存文件

:wq
    这样我们就定义了存用户名和密码的文件

    【3】在nginx的虚拟主机配置文件里面设置

    打开您的站点的配置文件 ,一般路径是安装路径下面的 conf/vhost/目录下。

    打开配置文件,

vi test.你的域名
 
    里面已经有了配置的信息了,在里面加上一下配置

 代码如下 复制代码
location /admin/{
 
auth_basic 'hello,zhoumanhe!';
auth_basic_user_file  /home/mypwd/pass;
}
location /wp-login.php {
auth_basic 'Hi,zhou manhe.welcome back!';
auth_basic_user_file  /home/mypwd/pass;
}

说明一下,auth_basic后面的是提示信息,auth_basic_user_file后面的就是你的那个存放用户名和密码的文件的路径

然后保存,重启一下nginx,如果重启提示有错,可能是配置文件哪里写过了,回去检查一下。如果ok,就测试一下吧!出现这个说明成功了一半。为什么说成功了一半?!!


QQ截图20140708221528

    【4】处理意外情况

输入用户名和密码试试,进入到后台的登录地址了没有?有一些朋友可能会遇到500的错误,我就一直纠结与这个好久。。。如果配置文件有错,重启的时候会报错的啊,网上查了一下说500有可能是配置文件的重写规则有错,检查了,没错。。。后面我查看了nginx的日志文件,报错是

15868#0: *5606 open() “/home/mypwd/pass” failed (13: Permission denied)…..;

又百度了一下,是这个读取这个文件的权限不够,在linux命令行下面查看了一下nginx的进程

 代码如下 复制代码

ps -aux | grep nginx

发现nginx的master进程是root的用户,但是worker process进程是nobody用户的,而我的nginx是root用户的,默认是用worker进程读文件,虽然我赋予了777权限也还是不行(不懂为什么),所以要吧worker进程改成root的,这样就访问得了了。

打开nginx的配置文件,nginx安装目录的conf/nginx.conf文件,找到#user nobody,或者也有可能是是user nobody,改成user root; 即可。重启nginx试一下,是不是成功了呢

案例
正常的:pass.你的域名,要加密的路径 pass.你的域名/admin,用户名:zhou,密码:123

热门栏目