English |
  • 美国VPS主机推荐
  • |
  • 代购服务
  • |
  • 10美元以下VPS
  • |
  • VPS新手指南/教程
  • |
  • 留言板
  • |
  • 关于
  • | 登录 |

    LNMP下为Nginx目录设置访问验证的用户名密码

    2011年07月1日 上午 | 作者:VPS侦探

    有时候需要象Apache那样为指定的目录添加访问验证,一般在Apache下使用htpasswd来添加,而htpasswd是包含在apache2-utils里,一般LNMP一键安装包或自己编译安装LNMP都不会安装apache2-utils。下面VPS侦探说一下如何为Nginx的网站目录设置访问验证

    1、创建类htpasswd文件

    执行:wget -c soft.vpser.net/lnmp/ext/htpasswd.sh;bash htpasswd.sh

    按提示输入用户名、密码、及认证文件名。脚本会自动生成认证文件。记录下脚本返回的文件路径。如:/usr/local/nginx/conf/vpser.net.auth。

    2、为Nginx添加auth认证配置

    下面是以某域名下面的soft目录为例,在域名的server段里加上如下代码:
    location ^~ /soft/
    {
    auth_basic "Authorized users only";
    auth_basic_user_file 这里写前面脚本返回的文件路径;
    }

    Authorized users only为提示信息,可以修改成自己想让他提示的信息;auth_basic_user_file 后面需要填htpasswd.sh脚本返回的人家文件的路径。按上面的提示修改好配置后,重启nginx,访问http://yourdomainname/soft/ 就会提示输入用户名和密码。

    注意,加上认证之后该目录下的PHP将不会被解析,会出现下载提示,如果想可以解析PHP可以将上面的配置改为:

    location ^~ /soft/ {
    location ~ .*\.(php|php5)?$ {
    fastcgi_pass unix:/tmp/php-cgi.sock;
    fastcgi_index index.php;
    include fcgi.conf;
    #lnmp 1.1以上版本用include fastcgi.conf;替换include fcgi.conf
    }
    auth_basic "Authorized users only";
    auth_basic_user_file 这里写前面脚本返回的文件路径;
    }

    本教程适合LNMP一键安装包或自己安装的LNMP,只不过目录和配置文件可能位置不一样。

    设置完执行:/usr/local/nginx/sbin/nginx -t 测试配置是否有错误。

    再执行:/usr/local/nginx/sbin/nginx -s reload 载入配置文件。

    如有问题欢迎在本文下方留言或到VPS论坛交流反馈。

    原创文章,谢绝转载!

    >>转载请注明出处:VPS侦探 本文链接地址:https://www.vpser.net/build/nginx-htpasswd.html
    VPS侦探推荐:
    遨游主机VultrLinode搬瓦工LOCVPSKVMLAHOSTKVMHostXen80VPS美国VPS主机,国内推荐腾讯云阿里云
    欢迎加入VPS侦探论坛交流:https://bbs.vpser.net

    发表评论

    *必填

    *必填 (不会被公开)

    评论(25条评论)

    1. jenkees说道:

      按照步骤进行设置了
      网站的根目录:/home/wwwroot/

      location / {
      location ~ .*\.(php|php5)?$ {
      fastcgi_pass unix:/tmp/php-cgi.sock;
      fastcgi_index index.php;
      include fcgi.conf;
      }

      验证之后无法访问该目录下的 html、php文件 = =,location后面应该如何跟?

    2. viscorpio说道:

      如果要追加一个页面跳转,请问该怎么写呢?
      当客户点击取消输入账户和密码,使页面跳转至指定的自定义页面,应该怎么写呢?

    3. VPS侦探说道:

      @leelei, 你那边网络有问题

    4. leelei说道:

      wget -c soft.vpser.net/lnmp/ext/htpasswd.sh;bash htpasswd.sh

      输入命令后提示错误:
      http://soft.vpser.net/lnmp/ext/htpasswd.sh
      Resolving soft.vpser.net... 2600:3c01::f03c:91ff:fe96:d57a, 74.207.246.99
      Connecting to soft.vpser.net|2600:3c01::f03c:91ff:fe96:d57a|:80... failed: Network is unreachable.
      Connecting to soft.vpser.net|74.207.246.99|:80... failed: Network is unreachabl

    5. VPS侦探说道:

      @liuzixin, nginx没法给你记住,只能在浏览器上记住密码

    6. liuzixin说道:

      请问,添加basic认证后,会弹出输入用户名和密码的窗口,有没有办法让nginx记住用户名密码,下次可以自动登录啊?

    7. VPSer说道:

      @kasim,no user/password was provided for basic authentication 好像设置了error_page 会报这个错误

    8. kasim说道:

      我这边用了验证后一直报500错误,查看日志主要有“ no user/password was provided for basic authentication”,open() "/usr/local/nginx/conf/vpser.net.auth.conf" failed (13: Permission denied),但是我的vpser.net.auth.conf文件的权限设置为777,应该不存在权限问题

    9. hzqim说道:

      问题解决:总是403是认证失败,原因是密码文件路径指示错误!
      网上找到这句话:

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

    10. hzqim说道:

      @hzqim,
      还有,我的网站是通过https访问的。

    11. hzqim说道:

      直接就是403,不知道为什么! 😥 😥

    12. VPSer说道:

      @cc, 直接把认证的两行代码放server段里。

    13. cc说道:

      你好,如果要对整个网站的根目录进行加密,就是访问网站的时候 直接进行认证该怎么处理呢?

    14. 囧啊囧说道:

      暂时不用。

    15. 海涛说道:

      vps可望不可及呀!