Nginx Http认证 实现访问网站或目录密码认证保护
2013-11-13 18:25
666 查看
对于实现访问网站或目录密码认证保护,nginx的HTTP基本认证模块(HTTP Auth Basic)可以实现.
这个模块提供基于用户名与密码的验证来保护你的站点或站点的一部分。
step1:
打开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 工具。
[root@REKFAN /]# apt-get install apache2-utils
step4:
使用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/.* 意为保护该目录下所有文件。当然,只需要一次认证。并不会每次请求或每请求一个文件都要认证一下。
这个模块提供基于用户名与密码的验证来保护你的站点或站点的一部分。
step1:
打开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 工具。
[root@REKFAN /]# apt-get install apache2-utils
step4:
使用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/.* 意为保护该目录下所有文件。当然,只需要一次认证。并不会每次请求或每请求一个文件都要认证一下。
相关文章推荐
- xxx无法访问 你可能没有权限使用网络资源.请与这台服务器的管理员联系以查明你是否有访问权限.
- TCP有限状态机分析
- 转:Wireshark基本介绍和学习TCP三次握手
- keepalived+LVS超时设置产生的realserver的tcp连接不释放问题
- 黑马程序员——网络编程
- Android MediaPlayer与Http Proxy结合之优化篇
- HttpServletResponse对象
- Android MediaPlayer与Http Proxy结合之提高篇
- Android MediaPlayer与Http Proxy结合之基础篇
- Android提高第二十篇之MediaPlayer播放网络音频
- 新手站长建站之处需要重视的误区
- Http协议笔记
- Http协议笔记
- MediaPlayer播放网络视频
- 网络经典DOS命令
- jsdt 插件 httpclient模型发送消息至服务端
- Linux 内核调试3-UML网络配置
- muduo网络库学习之muduo_http 库涉及到的类
- 一个基于red5+flash的网络聊天室red5Chat
- [转]利用Winsock实现HTTP的GET请求