• 【Nginx】Nginx 鉴权 (htpasswd) + Nginx 文件下载配置


    前言

    今天遇到一个有趣的小需求:通过URL访问并下载服务器上某个文件夹的文件,因此查找了资料进行了 Nginx 文件下载的配置,又因为不想完全对外开放,所以就加上了鉴权功能。这篇文章来记录一下相关配置步骤。

    参考目录

    nginx.conf 完整配置内容

    server {
    	# 需要下载的文件端口(此处没有设置域名访问,直接使用IP)
        listen       9778;
    
        auth_basic "请输入用户和密码"; # 验证时的提示信息
        auth_basic_user_file /etc/nginx/password; # 认证文件
    
        location / {
        	# 需要下载的文件夹路径(可以自定义)
            root /usr/local/filesDownload;
    
            sendfile on;   # 开启高效文件传输模式(零拷贝)
            autoindex on;  # 开启目录文件列表
            autoindex_exact_size on;  # 显示出文件的确切大小,单位是bytes
            autoindex_localtime on;  # 显示的文件时间为文件的服务器时间
            charset utf-8,gbk;  # 避免中文乱码
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    效果展示

    在这里插入图片描述
    在这里插入图片描述

    配置流程1:Nginx 配置文件下载

    零拷贝

    sendfile on;
    
    • 1

    在之前的文章【Nginx】学习笔记 01 - Nginx 最小配置 nginx.conf 简单分析 有过详细说明,在此不再赘述。

    autoindex 配置

    autoindex on;
    
    • 1

    启用或禁用目录列表输出(图源官方文档):
    这里是引用

    autoindex_exact_size on;
    
    • 1

    是否列出详细的文件大小,或者是舍入到 MB/GB(图源官方文档):
    在这里插入图片描述

     autoindex_localtime on;
    
    • 1

    列出时间(图源官方文档):
    在这里插入图片描述

    配置流程2:Nginx 配置鉴权

    鉴权配置

    auth_basic "请输入用户和密码"; # 验证时的提示信息
    auth_basic_user_file /etc/nginx/password; # 认证文件
    
    • 1
    • 2

    鉴权配置,可以使用 Apache 的工具 htpasswd 实现(图源官方文档):
    在这里插入图片描述

    配置流程3:htpasswd 生成鉴权文件

    安装 htpasswd

    yum -y install httpd-tools
    
    • 1

    在安装的时候遇到一个报错:
    在这里插入图片描述
    找了一下资料,可以通过以下命令修复:

    cd /var/lib/rpm/
    for i in `ls | grep 'db.'`;do mv $i $i.bak;done
    rpm --rebuilddb
    yum clean all
    
    • 1
    • 2
    • 3
    • 4

    生成鉴权文件

    创建一个用户名为 root 的用户信息(文件地址为 /etc/nginx/password):

    htpasswd -c /etc/nginx/password root
    
    • 1

    输入两次密码即可创建成功:
    在这里插入图片描述
    查看密码:
    在这里插入图片描述
    注意文件地址需要与 Nginx 配置文件保持一致。
    至此所有配置完成。

    关于 htpasswd 的一些补充

    htpasswd 默认加密方式

    htpasswd 默认使用的是 MD5 加密。
    这一点可以通过文档或者命令进行查看:

    htpasswd -h
    
    • 1

    在这里插入图片描述
    在这里插入图片描述
    也可以配置其他加密方式。

    htpasswd 部分参数说明

    指令解析
    -c创建密码文件(passwordfile),如果文件已经存在则会被重写和截断。
    -m使用 MD5 加密。(自版本 2.2.18 开始是默认加密方式)
    -B使用 bcrypt 加密。
    -d使用 crypt() 加密。(自版本 2.2.17 及以前是默认加密方式)不支持 Windows 和 Netware平台。
    -s使用 SHA 加密。但目前该加密算法不安全。
    -p明文密码。仅支持 Windows 和 Netware平台。
    -D根据用户名删除加密文件中的指定用户。
    passwdfile包含用户名和密码的文件名称。如果给出了 -c,则如果该文件不存在,则创建该文件;如果该文件存在,则重写并截断该文件。
    username要在 passwdfile 中创建或更新的用户名。如果该文件中不存在username,则添加一个条目;如果存在,则修改密码。
  • 相关阅读:
    BUUCTF [BJDCTF2020]just_a_rar 1
    【数据结构之栈、队列、数组】
    系列六、JVM的内存结构【栈】
    进销存软件为批发零售商强化标准企业管理流程
    拖动排序与置顶的Java实现
    初识Java 10-2 集合
    找不到vcomp100.dll,无法继续执行代码怎样修复
    猿创征文|Java-String、StringBuffer、StringBuilder详解
    SpringBoot整合RabbitMQ图文过程以及RabbitTemplate常用API介绍
    Vue 3 中的 setup 函数是如何工作的?
  • 原文地址:https://blog.csdn.net/Michelle_Zhong/article/details/125506461