搭建HTTP内网文件服务器-以NGINX为例
需求
在内网建一个文件服务器,需要示意图如下:
实现需求,可行的组件:
apache http |
为方续架构扩展(如做反向代理等)、扩展功能的丰富性和个人对组件的熟悉程度,最终选择了Nginx.
nginx 搭建文件服务
这里需要使用到Nginx的autoindex 特性(ngx_http_autoindex_module 模块),以及其它几个module。由于本文涉及到Nginx的多个版本的不同feature ,建议nginx安装版本为: 1.18.0 + ,详情参照Nginx Changes
nginx install
wget http://nginx.org/packages/rhel/7/x86_64/RPMS/nginx-1.18.0-2.el7.ngx.x86_64.rpm |
修改配置
配置nginx config
1 | user nginx; |
server 配置文件
1 | vim /etc/nginx/conf.d/file-server.conf |
配置文件目录权限
设置文件目录权限
chown -R nginx:users /opt/data/hdp_dir/ |
- nginx 重启
开机启动 |
- 测试
curl -XGET "http://127.0.0.1:80' |
文件服务搭建完毕。如下图:
提升IO性能
由于大并发的大文件下载,磁盘IO会最先成为瓶颈。所以这里对IO进行优化,增加aio 和 sendfile tcp_nopush tcp_nodelay 用以提升IO性能.
以下载一个10G文件为例子,从实际测试效果对比看,磁盘的IO压力的下降了很多,如下图:
按照官网的Thread Pools in NGINX Boost Performance 9x!,性能可以提升9倍。
AIO配置说明,参照 nginx aio .
增加文件预览
实现对配置允许的文件格式后缀,文件可以打开,可以下载。
location / { |
总结
- index.html文件冲突
Nginxautoindex
可能会遇到目录下有 index.html 文件,出现401Error Object
问题,可以采用下面的方法解决:
对目录下的 index.html文件进行重命名 |
修改完成后可能需要nginx 服务。
权限控制
如果需要设置权限控制,可以使用ngx_http_access_module
, 需要用户鉴权还可用设置HTTP Basic Authentication
. 对于需要多租户的场景,可以配置 Basic HTTP authentication,参考nginx用户认证配置( Basic HTTP authentication文件搜索
对于需要使用搜索功能,可以使用ngx-fancyindex)
插件,实现效果如下图:传输安全
如果涉及敏感数据传输,建议增加TLS1.2+协议进行加密传输为什么不用FTP实现
FTP不是一项安全的协议,并且具有许多安全漏洞。比如存在暴力破解、FTP反弹攻击。在加上FTP使用的端口是21,一般会被防火墙屏蔽。(yum 等repository 仓库默认使用的都是HTTP协议)