Nginx创建password保护文件夹

nginx 的根文件夹 为:/home/undoner/nginx-www
nginx 訪问地址 为:http://127.0.0.1
本文实现对nginx根文件夹文件訪问的权限控制

(1)nginx指定密码文件格式为:“username:password”。可是password不能为明文,必须经过crypt加密。所以须要用工具产生密码字符串

以下有三种方法:

第一种.

在线直接生成加密字符串:http://tool.oschina.net/htpasswd

另外一种

python脚本:“htpasswd.py”。也能够下载

#!/usr/bin/python
"""Replacement for htpasswd"""
# Original author: Eli Carter

import os
import sys
import random
from optparse import OptionParser

# We need a crypt module, but Windows doesn‘t have one by default.  Try to find
# one, and tell the user if we can‘t.
try:
    import crypt
except ImportError:
    try:
        import fcrypt as crypt
    except ImportError:
        sys.stderr.write("Cannot find a crypt module.  "
                         "Possibly http://carey.geek.nz/code/python-fcrypt/\n")
        sys.exit(1)

def salt():
    """Returns a string of 2 randome letters"""
    letters = ‘abcdefghijklmnopqrstuvwxyz‘               ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ‘               ‘0123456789/.‘
    return random.choice(letters) + random.choice(letters)

class HtpasswdFile:
    """A class for manipulating htpasswd files."""

    def __init__(self, filename, create=False):
        self.entries = []
        self.filename = filename
        if not create:
            if os.path.exists(self.filename):
                self.load()
            else:
                raise Exception("%s does not exist" % self.filename)

    def load(self):
        """Read the htpasswd file into memory."""
        lines = open(self.filename, ‘r‘).readlines()
        self.entries = []
        for line in lines:
            username, pwhash = line.split(‘:‘)
            entry = [username, pwhash.rstrip()]
            self.entries.append(entry)

    def save(self):
        """Write the htpasswd file to disk"""
        open(self.filename, ‘w‘).writelines(["%s:%s\n" % (entry[0], entry[1])
                                             for entry in self.entries])

    def update(self, username, password):
        """Replace the entry for the given user, or add it if new."""
        pwhash = crypt.crypt(password, salt())
        matching_entries = [entry for entry in self.entries
                            if entry[0] == username]
        if matching_entries:
            matching_entries[0][1] = pwhash
        else:
            self.entries.append([username, pwhash])

    def delete(self, username):
        """Remove the entry for the given user."""
        self.entries = [entry for entry in self.entries
                        if entry[0] != username]

def main():
    """%prog [-c] -b filename username password
    Create or update an htpasswd file"""
    # For now, we only care about the use cases that affect tests/functional.py
    parser = OptionParser(usage=main.__doc__)
    parser.add_option(‘-b‘, action=‘store_true‘, dest=‘batch‘, default=False,
        help=‘Batch mode; password is passed on the command line IN THE CLEAR.‘
        )
    parser.add_option(‘-c‘, action=‘store_true‘, dest=‘create‘, default=False,
        help=‘Create a new htpasswd file, overwriting any existing file.‘)
    parser.add_option(‘-D‘, action=‘store_true‘, dest=‘delete_user‘,
        default=False, help=‘Remove the given user from the password file.‘)

    options, args = parser.parse_args()

    def syntax_error(msg):
        """Utility function for displaying fatal error messages with usage
        help.
        """
        sys.stderr.write("Syntax error: " + msg)
        sys.stderr.write(parser.get_usage())
        sys.exit(1)

    if not options.batch:
        syntax_error("Only batch mode is supported\n")

    # Non-option arguments
    if len(args) < 2:
        syntax_error("Insufficient number of arguments.\n")
    filename, username = args[:2]
    if options.delete_user:
        if len(args) != 2:
            syntax_error("Incorrect number of arguments.\n")
        password = None
    else:
        if len(args) != 3:
            syntax_error("Incorrect number of arguments.\n")
        password = args[2]

    passwdfile = HtpasswdFile(filename, create=options.create)

    if options.delete_user:
        passwdfile.delete(username)
    else:
        passwdfile.update(username, password)

    passwdfile.save()

if __name__ == ‘__main__‘:
    main()

第三种

perl脚本:“htpasswd2.pl”  ,内容例如以下:

#!/usr/bin/perl
use strict;
my $pw=$ARGV[0];
print crypt($pw,$pw)."\n";

(2)若是第一种方法。直接新建文本复制进去即可;若是另外一种或第三种。下载或新建文件后,注意加入可运行权限,再运行脚本生成用户名密码。

第一种:

将网页上面的结果(“2eN4uuMHGaLQQ”即“test1”加密后的字符串)直接复制进 htpasswd 文件里

htpasswd内容:test1:2eN4uuMHGaLQQ

另外一种:

chmod 777 htpasswd.py
./htpasswd.py -c -b htpasswd username password

比方:./htpasswd.py -c -b htpasswd undoner undoner    ,得到文件:htpasswd ,内容例如以下(“dFYOP1Zvmqyfo”即“undoner”加密后的字符串):

htpasswd内容:undoner:dFYOP1Zvmqyfo

第三种:

chmod 777 htpasswd2.pl
./htpasswd2.pl password

比方:./htpasswd2.pl test        ,得到密码字符串:N1tQbOFcM5fpg

可将 ”N1tQbOFcM5fpg“ 复制进 /etc/nginx/htpasswd 文件里。用户名是明文的,所以设什么都行,格式例如以下:

htpasswd内容:test:N1tQbOFcM5fpg

(3)最后将该密码文件htpasswd拷贝到nginx的配置文件文件夹(也可放其它位置。注意改路径+改权限),最后nginx里面加入配置即可。

chmod 777 htpasswd

在sites-available/default加入以下两行内容:

auth_basic "Password";

auth_basic_user_file /etc/nginx/htpasswd;

location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                auth_basic "Password";
                auth_basic_user_file /etc/nginx/htpasswd;
                charset  utf-8;
                root    /home/undoner/nginx-www;
                index   index.html index.htm;
                autoindex on;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }

(4)重新启动nginx

sudo /etc/init.d/nginx restart
时间: 2024-10-10 03:34:03

Nginx创建password保护文件夹的相关文章

win10正式版如何创建无法删除文件夹

通常情况下,文件夹是可以随意被删除的,但是一旦文件夹被删除,那么文件夹里面的文件可能就会丢失,因此可以建立一个别人无法删除的文件夹.那么,要怎么创建无法删除的文件夹呢?此文就为大家分享win10正式版如何创建无法删除文件夹. 1.首先可以在快捷键win+r,直接打开“运行”窗口,并输入cmd命令回车. 2.接着可以在“命令提示符”窗口中,并在D盘创建一个无法删除的文件夹,命令提示符框中输入“md d:\wendang..\ ”按回车. 3.并直接在D盘,并会看到刚创建的赌钱网站了. 4.然后可以

Excel催化剂开源第4波-ClickOnce部署要点之导入数字证书及创建EXCEL信任文件夹

Excel催化刘插件使用Clickonce的部署方式发布插件,以满足用户使用插件过程中,需要对插件进行功能升级时,可以无痛地自动更新推送新版本.但Clickonce部署,对用户环境有较大的要求,前期首次安装,比较波折,但相对于后续的自动更新的回报,笔者自我感觉还是很值得的.Clickonce部署过程中,要求导入数字证书和设置Excel共享路径这两个步骤,本篇开源代码主要讲述这个过程的自动化处理的代码实现,同样用的是Console程序. 为了还原一个干净无侵扰的网络世界,本文将不进行大规模地分发,

创建、删除文件夹和文件夹里的文件

创建一个文件夹: public function index(){ if (!is_dir('d:/hl')) { mkdir('d:/hl'); }else{ echo '文件夹已经存在'; } } 创建层级文件夹: public function index(){ $path='d:/hl/a/b/c'; if (!is_dir($path)) { if (mkdir($path,0777,true)) { echo '创建文件夹成功'; }else{ echo '创建文件夹失败'; } }

在程序document文件夹里边创建新的文件夹及删除文件夹

// //  ViewController.m //  12.18.04在document创建文件夹 // //  Created by 张凯泽 on 15/12/18. //  Copyright © 2015年 rytong_zkz. All rights reserved. // #import "ViewController.h" @interface ViewController () @property(nonatomic,strong)NSFileManager *fil

nginx 配置web 虚拟文件夹 而且codeIgniter,thinkphp 重定向url 地址

nginx 配置虚拟文件夹而且url 重定向 server { #侦听80port listen 8090; #定义使用www.xx.com訪问 server_name 127.0.0.1; #设定本虚拟主机的訪问日志 access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; root /home/lxy/www/cs/; #定义服务器的默认站点根文件夹位置 #默认请求 location / { index

window dos命令删除服务!创建私密文件夹!等等...

在命令行模式下输入sc查看命令: 语法:sc create | delete | config 服务名[参数](具体百度...) demo:删除服务->sc delete mongodb 创建普通方式不能删除的文件夹:md E:\001..\ 进入文件夹:start E:\001..\ 删除文件夹:rd:E:\001..\(只能删除空目录!)

C#控制台基础 directory创建一个新文件夹

1 代码 1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 8 namespace directory创建一个文件夹 9 { 10 class Program 11 { 12 static void Main(string[] args) 13 { 14

C#判断文件及文件夹是否存在并创建(C#判断文件夹存在)

protected void Button1_Click(object sender, EventArgs e) { if (Directory.Exists(Server.MapPath("~/upimg/hufu")) == false)//如果不存在就创建file文件夹 { Directory.CreateDirectory(Server.MapPath("~/upimg/hufu")); } //Directory.Delete(Server.MapPath

Codeblocks 显示所创建工程的文件夹

问题: 有时创建完工程后没有默认打开文件夹: 方法: 使用F2 +shift view->manager 原文地址:https://www.cnblogs.com/pam-sh/p/12319736.html