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

本文介绍了如何配置Nginx以实现通过URL安全地下载服务器文件夹的内容。首先,通过开启sendfile和autoindex选项实现了高效的文件传输和目录列表展示。然后,利用auth_basic和htpasswd设置了HTTP基本认证,增强了安全性。在配置过程中,还解决了yum安装htpasswd时遇到的问题。最后,详细解释了htpasswd的加密方式和参数选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

今天遇到一个有趣的小需求:通过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: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,则添加一个条目;如果存在,则修改密码。
Nginx 可以通过配置模块来代理 WebSocket 连接,并且可以在代理的过程中进行,以确保只有经过授的用户可以建立 WebSocket 连接。这通常可以通过修改 Nginx配置文件来实现。下面是一个基本的配置示例,用于说明如何使用 Nginx 的 `location` 块和 `proxy_pass` 指令来代理 WebSocket 请求,并通过 `proxy_set_header` 指令转发用户认证信息。 ```nginx http { server { listen 80; server_name example.com; location /websocket { proxy_pass http://backend_websocket_server; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; # 这里可以添加配置,比如: # proxy_set_header Authorization "Bearer $token"; # 如果使用了基于Token的 # 如果需要在Nginx中处理,可以使用auth_basic和auth_basic_user_file指令 # auth_basic "Restricted Area"; # auth_basic_user_file /path/to/.htpasswd; # 其他自定义的配置,如使用 Lua 模块进行复杂的逻辑 } # 其他配置... } } ``` 在这个配置中,`proxy_pass` 指令用于指定后端的 WebSocket 服务器地址。`proxy_set_header` 指令用于将重要的请求头信息转发给后端服务器。如果需要,可以根据你的方式来添加额外的配置。例如,如果你使用基于 HTTP 基本(Basic Auth),可以使用 `auth_basic` 和 `auth_basic_user_file` 指令。如果是基于 Token 的,则可以在 `proxy_set_header` 中添加 `Authorization` 头部。 此外,Nginx 还支持使用外部模块,如 `ngx_http_lua_module`,来进行更复杂的逻辑。如果使用 Lua 模块,需要在 Nginx 中加载 Lua 脚本,并在脚本中编写逻辑。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MichelleChung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值