搭建HTTP内网文件服务器-以NGINX为例
需求
在内网建一个文件服务器,需要示意图如下:
实现需求,可行的组件:
1 | apache http |
为方续架构扩展(如做反向代理等)、扩展功能的丰富性和个人对组件的熟悉程度,最终选择了Nginx.
nginx 搭建文件服务
这里需要使用到Nginx的autoindex 特性(ngx_http_autoindex_module 模块),以及其它几个module。由于本文涉及到Nginx的多个版本的不同feature ,建议nginx安装版本为: 1.18.0 + ,详情参照Nginx Changes
nginx install
1 | 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 |
配置文件目录权限
设置文件目录权限
1 | chown -R nginx:users /opt/data/hdp_dir/ |
- nginx 重启
1
2
3
4
5
6
7开机启动
systemctl enable nginx
启动
systemctl restart nginx
systemctl status nginx - 测试文件服务搭建完毕。如下图:
1
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 .
增加文件预览
实现对配置允许的文件格式后缀,文件可以打开,可以下载。
1 | location / { |
总结
index.html文件冲突 Nginx
autoindex
可能会遇到目录下有 index.html 文件,出现401Error Object
问题,可以采用下面的方法解决:1
2对目录下的 index.html文件进行重命名
find ./ -type f -name "index.html" -exec mv {} {}-bak \;修改完成后可能需要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协议)