【Nginx】Nginx 鉴权 (htpasswd) + Nginx 文件下载配置
前言
今天遇到一个有趣的小需求:通过URL访问并下载服务器上某个文件夹的文件,因此查找了资料进行了 Nginx 文件下载的配置,又因为不想完全对外开放,所以就加上了鉴权功能。这篇文章来记录一下相关配置步骤。
参考目录
- Nginx 官方文档 - Module ngx_http_autoindex_module
列出相关文件夹下的文件。 - Nginx 官方文档 - Module ngx_http_auth_basic_module
鉴权配置。 - htpasswd 官方文档
用于鉴权文件生成。 - 使用yum提示Error: rpmdb open failed
yum 安装报错修复。
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; # 显示出文件的确切大小,单位是bytesautoindex_localtime on; # 显示的文件时间为文件的服务器时间charset utf-8,gbk; # 避免中文乱码}
}
效果展示


配置流程1:Nginx 配置文件下载
零拷贝
sendfile on;
在之前的文章【Nginx】学习笔记 01 - Nginx 最小配置 nginx.conf 简单分析 有过详细说明,在此不再赘述。
autoindex 配置
autoindex on;
启用或禁用目录列表输出(图源官方文档):
autoindex_exact_size on;
是否列出详细的文件大小,或者是舍入到 MB/GB(图源官方文档):
autoindex_localtime on;
列出时间(图源官方文档):
配置流程2:Nginx 配置鉴权
鉴权配置
auth_basic "请输入用户和密码"; # 验证时的提示信息
auth_basic_user_file /etc/nginx/password; # 认证文件
鉴权配置,可以使用 Apache 的工具 htpasswd 实现(图源官方文档):
配置流程3:htpasswd 生成鉴权文件
安装 htpasswd
yum -y install httpd-tools
在安装的时候遇到一个报错:

找了一下资料,可以通过以下命令修复:
cd /var/lib/rpm/
for i in `ls | grep 'db.'`;do mv $i $i.bak;done
rpm --rebuilddb
yum clean all
生成鉴权文件
创建一个用户名为 root 的用户信息(文件地址为 /etc/nginx/password):
htpasswd -c /etc/nginx/password root
输入两次密码即可创建成功:

查看密码:

注意文件地址需要与 Nginx 配置文件保持一致。
至此所有配置完成。
关于 htpasswd 的一些补充
htpasswd 默认加密方式
htpasswd 默认使用的是 MD5 加密。
这一点可以通过文档或者命令进行查看:
htpasswd -h


也可以配置其他加密方式。
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,则添加一个条目;如果存在,则修改密码。 |
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!




