Nginx Http认证 实现访问网站或目录密码认证保护

    2015-11-19 16:53     0 条评论

对于实现访问网站或目录密码认证保护,nginx的HTTP基本认证模块(HTTP Auth Basic)可以实现.
这个模块提供基于用户名与密码的验证来保护你的站点或站点的一部分。

step1: 修改nginx.conf文件

打开conf/nginx.conf文件,添加下面的指令:

location  /  {
        auth_basic            "Restricted";
        auth_basic_user_file  webpass;
}

解释:

auth_basic

指令包含一个具有测试用户名和密码的HTTP基本认证,指定的参数将用于认证域。如果将值设置为“off”则忽略下级指令继承的动作。

auth_basic_user_file

指令为验证域指定了密码文件,0.6.7版本以后这里指定的文件是nginx.conf所在目录的相对路径,而不是–prefix指定的路径。

“Restricted" 单词将会出现在第一次访问Nginx站点的弹出框内。
webpass是一个文件,位于conf目录下。注意如果你 设置的是 conf/webpass,这个webpass文件应该在conf/conf/目录下。
或者避免麻烦,直接用绝对路径。

step2: 创建密码文件

创建pwd文件。添加你的用户名和密码(明文)
这个密码会在第三步被替换

这个文件格式如下:

user:770328
user2:pass2
user3:pass3

step3: 安装apache2-utils

安装Apache2 工具。

[root@REKFAN /]# apt-get install apache2-utils

step4: 使用Apache2工具修改密码。

使用Apache2工具修改密码。

[root@REKFAN /]# htpasswd /usr/nginx/conf/webpass user

你会被要求输入两次密码。
现在pwd文件内容改变了:

[root@REKFAN /]# vim /usr/nginx/conf/webpass
user:$apr1$I2FIVtPG$I51oSU4eatH.tJdnmxG6K0

如果没有apache的htpasswd程序,可以使用pl程序生成:
程序地址:http://trac.edgewall.org/export/10890/trunk/contrib/htpasswd.py
使用方法: ./htpasswd.py -b -c webpass admin 123456
webpass为密码文件,admin是用户名,123456是密码.

step5: 重新启动Nginx服务。

[root@REKFAN /]# service nginx restart

step6: 登录你的站点。

例子:
如果是为了给网站加上认证,可以直接将认证语句写在nginx的配置server段中。

如果是为了给目录加上认证,就需要写成目录形式了。同时,还要在目录中加上php的执行,否则php就会被下载而不执行了。

例如:基于整个网站的认证,auth_basic在php解释之前。

server
{
            listen 80;
            server_name www.Rekfan.com Rekfan.com;
            root /www/Rekfan.com;
            index index.html index.htm index.php;
            auth_basic "input you user name and password";
            auth_basic_user_file /usr/local/nginx/conf/vhost/nginx_passwd;
            location ~ .php$
            {
                            fastcgi_pass 127.0.0.1:9000;
                            fastcgi_index index.php;
                            include fastcgi_params;
            }
            location ~ /.ht
            {
                            deny all;
            }
            access_log /logs/Rekfan.com_access.log main;
}

针对目录的认证,在一个单独的location中,并且在该location中嵌套一个解释php的location,否则php文件不会执行并且会被下载。auth_basic在嵌套的location之后。

server
{
            listen 80;
            server_name www.rekfan.com Rekfan.com;
            root /www/Rekfan.com;
            index index.html index.htm index.php;
            location ~ ^/admin/.*
            {
                        location ~ .php$
                        {
                                fastcgi_pass 127.0.0.1:9000;
                                fastcgi_index index.php;
                                include fastcgi_params;
                        }
                        auth_basic "auth";
                        auth_basic_user_file /usr/local/nginx/conf/vhost/auth/admin.pass;
                        }
                        location ~ .php$
                        {
                                fastcgi_pass 127.0.0.1:9000;
                                fastcgi_index index.php;
                                include fastcgi_params;
                        }
                        location ~ /.ht
                        {
                                deny all;
                        }
                        access_log /logs/Rekfan.com_access.log main;
        }
}

这里有一个细节,就是location ~ ^/admin/.* {…} 保护admin目录下的所有文件。如果你只设了/admin/ 那么直接输入/admin/index.php还是可以访问并且运行的。 ^/admin/.* 意为保护该目录下所有文件。当然,只需要一次认证。并不会每次请求或每请求一个文件都要认证一下。

本文地址:https://www.yhawaii.net/nginx_protecting_directory.html
版权声明:本文为原创文章,版权归  所有,欢迎分享本文,转载请保留出处!

 发表评论


表情