Nginx 文件服务器搭建
前言
一直想搭建一个文件服务器,就是那种可以在线查看文件目录和文件列表,可以下载也可以上传。记得在学校时,用过那种 ftp 服务器,主要功能就是账号密码登录后上传或者下载文件。
当然可以用 PHP 或者 Java 做一个上传下载的程序,但最直接也最简单的方法,还是借助 Nginx 等服务器实现。
参考了网上的一些教程,做了一个基于 Nginx 的简单文件服务器。
简单 Nginx 文件服务器搭建
文件服务器主要有列表功能,上传文件功能,下载文件功能,和用户登录验证功能。
先来看看如何实现列表功能。玩过服务器的应该都了解,Apache 或者 Nginx 在配置虚拟主机时,可以指定程序的 index 默认文件,这一般会是应用的入口文件。当不存在默认文件的时候,Nginx 默认会展示 403 Access Forbidden
。此时可以通过配置一个参数 autoindex,选择浏览目录。
server {
...
# 默认为 off
autoindex on;
...
}
这个配置项可以放在 location /
里面,表示根目录下的配置,也可以放在 ~ 外面,表示虚拟主机全局配置。
其他相关的配置参数:
autoindex_exact_size off;
# 默认为on,显示出文件的确切大小,单位是bytes。
# 改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_localtime on;
# 默认为off,显示的文件时间为GMT时间。
# 改为on后,显示的文件时间为文件的服务器时间
# 如果列出的文件名中有中文一定要加上
charset utf-8;
# 如果映射的目录在其他地方,可以使用别名
alias /data/;
修改了虚拟主机的配置文件后,需要重启 Nginx 生效:
path/to/nginx/bin/nginx -t
path/to/nginx/bin/nginx -s reload
# 如果使用 yum 安装
nginx -t
nginx -s reload
再次访问那个虚拟主机,页面会变成 Index of /
和一个文件列表。
可以直接右击下载。上传暂时需要借助 ftp 工具。
Nginx 文件服务器添加密码访问
这需要两步,第一步修改 Nginx 虚拟主机配置,配置认证的密码文件;第二步生成密码文件。
1. 修改 Nginx 虚拟主机配置
auth_basic 'ftp_restricted'; # 认证名称,随意填写
auth_basic_user_file /htpasswd/passwd.db; # 认证的密码文件,需要生成
2. 生成密码文件
可以选择通过 htpasswd 命令,生成用户名和账户到指定的文件中。
据说 htpasswd 属于 Apache 服务器的一个工具,在 Nginx 下使用的话,需要独立安装:
yum -y install httpd-tools
安装好之后,就可以使用 htpasswd 指令了:
htpasswd -c /htpasswd/passwd.db test
# 之后会提示输入密码和再次输入密码
指令执行后,可以使用 cat /htpasswd/passwd.db
查看生成的密码文件内容。形式如下:
# 用户名:加密密码
test:xxx
每执行一次指令(用户名不重复),会生成一条新的账号、密码记录。
也可以借助工具,或自己写一个脚本生成账号密码文本。
经测试,除了 plain 也就是不加密形式,其他加密形式,如 crypt、md5、sha-1 生成的用户名密码文本都可以正常使用。
在得到用户名密码文本后,直接将其加入到密码文件中即可(每一条密码记录都需要独立一行)。
密码授权访问的生命周期暂时不清楚,但关闭浏览器后,会话结束。