一款nginx中给目录增加密码保护实现程序,可以有效的保护一些目录不被访问,有需要的朋友可参考一下。

了防止一些可能出现存在漏洞的后台脚本暴露,使用验证的方式保护这些文件所在的目录

使用apache的htpasswd工具生成密码

yingouqlj@yingouqlj-laptop:~$ htpasswd -b -c filename username passwd
Adding password for user ******

nginx可以为网站或目录甚至特定的文件设置密码认证。密码必须是crypt加密的。可以用apache的htpasswd来创建密码。

格式为:htpasswd -b -c site_pass username password

site_pass为密码文件。放在同nginx配置文件同一目录下,当然你也可以放在其它目录下,那在nginx的配置文件中就要写明绝对地址或相对当前目录的地址。

如果你输入htpasswd命令提示没有找到命令时,你需要安装httpd.如centos是yum install httpd

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

如果是为了给目录加上认证,就需要写成目录形式了。同时,还要在目录中加上php的执行,否则php就会被下载而不执行了。
例如:基于整个网站的认证,auth_basic在php解释之前。

 代码如下 复制代码
server { 
    listen       80; 
    server_name www.akii.org akii.org; 
    root  /www/akii; 
    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/akii.org_access.log main; 

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

 代码如下 复制代码

1server { 
    listen       80; 
    server_name www.akii.org akii.org; 
    root  /www/akii; 
    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/akii.org_access.log main; 
}

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

附一个可用的bash脚本 用于创建密码

 代码如下 复制代码
   #!/bin/bash
   PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
   export PATH
 
   #set UserName
 
           username=""
           read -p "Please input UserName:" username
           if [ "$username" = "" ]; then
                   echo "Error:UserName can't be NULL!"
                   exit 1
           fi
           echo "==========================="
           echo "UserName was: $username"
           echo "==========================="
 
   #set password
 
           unpassword=""
           read -p "Please input the Password:" unpassword
           if [ "$unpassword" = "" ]; then
                   echo "Error:Password can't be NULL!"
                   exit 1
           fi
           echo "==========================="
           echo "Password was: $unpassword"
           echo "==========================="
   password=$(perl -e 'print crypt($ARGV[0], "pwdsalt")' $unpassword)
 
   #set htpasswd file
 
           htfile=""
           read -p "Please input Auth filename:" htfile
           if [ "$htfile" = "" ]; then
                   echo "Error:Auth filename can't be NULL!"
                   exit 1
           fi
           echo "==========================="
           echo "Auth File:$htfile"
           echo "==========================="
 
           get_char()
           {
           SAVEDSTTY=`stty -g`
           stty -echo
           stty cbreak
           dd if=/dev/tty bs=1 count=1 2> /dev/null
           stty -raw
           stty echo
           stty $SAVEDSTTY
           }
           echo ""
           echo "Press any key to Creat...or Press Ctrl+c to cancel"
           char=`get_char`
   if [ ! -f $htfile ]; then
     echo "Create Auth file......"
cat >$htfile<<eof
$username:$password
eof
   echo "Create Auth file successful,auth file path:$htfile"
   else
           echo "File already exists,please run this script again."
           exit 1
   fi

命令参数注释:

Usage:

htpasswd [-cmdpsD] passwordfile username
htpasswd -b[cmdpsD] passwordfile username password

htpasswd -n[mdps] username
htpasswd -nb[mdps] username password
-c Create a new file.
-n Don’t update file; display results on stdout.
-m Force MD5 encryption of the password (default).
-d Force CRYPT encryption of the password.
-p Do not encrypt the password (plaintext).
-s Force SHA encryption of the password.
-b Use the password from the command line rather than prompting for it.
-D Delete the specified user.

-b 使用命令行处理

nginx中给目录增加密码保护实现程序的更多相关文章

  1. nginx中针对目录进行IP限制

    一个不错的nginx中针对目录进行IP限制 ,这里我以phpmyadmin目录只能让内网IP访问,而外网不能访问的配置方法,有需要的同学可参考. nginx phpmyadmin 针对内网ip用户开放 ...

  2. CentOS6.4 安装OpenResty和Redis 并在Nginx中利用lua简单读取Redis数据

    1.下载OpenResty和Redis OpenResty下载地址:wget http://openresty.org/download/ngx_openresty-1.4.3.6.tar.gz Re ...

  3. ASP.NET MVC项目中App_Code目录在程序应用

    学习ASP.NET MVC,如果你是开发ASP.NET MVC项目的,也许你去为项目添加前ASP.NET项目的APP_Code目录,在这里创建与添加的Class类,也许你无法在MVC项目所引用. 那这 ...

  4. Nginx中的root&alias文件路径及索引目录配置详解

    这篇文章主要介绍了Nginx中的root&alias文件路径及索引目录配置,顺带讲解了root和alias命令的用法,需要的朋友可以参考下     root&alias文件路径配置ng ...

  5. nginx中在超全局变量$_SERVER中增加变量

    业务中可能会用到一些自定义的超全局变量,需要在nginx中生成的,比如,每次nginx请求的id,可以在nginx中配置 如: location ~ \.php$ { root           / ...

  6. 在Nginx中搭建Nagios监控平台

    本文只做Nginx下Nagiox安装的说明,其它关于Nagios监控的详细配置请参考我的另一篇文章[Ubuntu 10.04下构建Nagios监控平台] Nagios依赖PHP环境和perl环境.由于 ...

  7. [C#]使用 C# 代码实现拓扑排序 dotNet Core WEB程序使用 Nginx反向代理 C#里面获得应用程序的当前路径 关于Nginx设置端口号,在Asp.net 获取不到的,解决办法 .Net程序员 初学Ubuntu ,配置Nignix 夜深了,写了个JQuery的省市区三级级联效果

    [C#]使用 C# 代码实现拓扑排序   目录 0.参考资料 1.介绍 2.原理 3.实现 4.深度优先搜索实现 回到顶部 0.参考资料 尊重他人的劳动成果,贴上参考的资料地址,本文仅作学习记录之用. ...

  8. Nginx中文文档-安装 Nginx

    nginx可以使用各平台的默认包来安装,本文是介绍使用源码编译安装,包括具体的编译参数信息. 正式开始前,编译环境gcc g++ 开发库之类的需要提前装好,这里默认你已经装好. ububtu平台编译环 ...

  9. C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁

    系列文章 C#开发奇技淫巧一:调试windows系统服务 C#开发奇技淫巧二:根据dll文件加载C++或者Delphi插件 C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁 程序目录的整理 ...

随机推荐

  1. css3 transition效果

    <meta charset="UTF-8"> <style> .btn { display: inline-block; font-size: 12px; ...

  2. Java基础 - 标识符

    标识符就是用来给包,类,方法变量等起名字的符号 组成规则: A:unicode字符 数字字符,英文大小写字母,汉字(不建议使用汉字) B:下划线 _ C:美元符 $ 注意事项: A:不能以数字开头 B ...

  3. 我的Android进阶之旅------>/storage/sdcard0, /sdcard, /mnt/sdcard ,/storage/emulated/legacy 的区别

    转自:http://bbs.gfan.com/android-5382920-1-1.html 关于android的4.2的0文件夹的详解---- android 4.0 ----在galaxy ne ...

  4. Notification状态栏显示信息

    Notification即通知,用于在通知栏显示提示信息. 在API Level > 11,Notification类中的一些方法被Android声明deprecated(弃用),而在API L ...

  5. 中国移动OnetNet云平台 使用WIFI模块ESP8266 TCP透传模式传输数据流步骤

    测试使用工具: WIFI模块型号:ESP8266 https://item.taobao.com/item.htm?spm=a1z10.1-c.w137712-175513579.2.btbD9X&a ...

  6. HackerRank - beautiful-binary-string 【字符串】

    题意 给出一个 N 位的 01 串 然后 每次 改动 可以将其中的 (0 -> 1) 或者 (1 -> 0) 然后 求 最少几次 改动 使得 这个 01 串 当中 不存在 连续的 010 ...

  7. iOS 屏幕原点坐标 && 导航栏风格的自定义

    其一 屏幕原点坐标 (x ,y) 受 self.navigationController. navigationBar 的 setTranslucent (BOOL) 属性控制 在 iOS7 以后   ...

  8. jenkins实现自动部署

    主机A搭建gitlab.gitlab下载:https://www.gitlab.cc/downloads/    (gitlab中文网) 主机B搭建jenkinsjenkins下载:https://j ...

  9. 20145229吴姗珊 《Java程序设计》第3周学习总结

    20145229吴姗珊 <Java程序设计>第3周学习总结 教材学习内容总结 第四章 认识对象 4.1类与对象 1.对象(Object):存在的具体实体,具有明确的状态和行为 2.类(Cl ...

  10. hd acm 1465

    问题:某人写了n封信和n个信封,如果所有的信都装错了信封.求所有的信都装错信封,共有多少种不同情况. 思路:由这道题引入错排公式:f(n)=(n-1)*[f(n-1)+f(n-2)]. 当N=1和2时 ...