简易文件服务器设计与搭建
背景
近期由于项目需要,分布式系统需要使用一个文件服务器,由于项目初期,出于成本,运维考虑,暂时排除掉DFS、TFS这种分布式文件服务器。
Nginx
Nginx是一个开源的WEB服务器,通过配置可以快速的实现文件服务器,所以这里考虑通过Nginx快速搭建一个文件服务器.
Nginx快速搭建文件服务器
这里假设Nginx已经安装完毕,可参考之前安装文章
打开conf/nginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29user root; # 修改用户为可以查看文件的用户
worker_processes 1;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 9999;
server_name _; # 名称不坐限制
location /images { # 匹配path
root /mnt/bd/data/marketing; # 文件所在主机根目录
autoindex on; # 开启文件索引
autoindex_exact_size on; # 显示文件大小
autoindex_localtime on; # 显示文件日期
}
}
}保存退出,重启nginx
1
sbin/nginx -s reload
此时可以登录浏览器查看http://myhome:9999/images查看文件列表
注意:这里”location /images”不仅要求请求path包含/images 并且主机目录也要对应/mnt/bd/data/marketing/images否则会报404错误
通过以上配置,可以快速完成文件服务器的搭建,但是,实际对外应用中,我们不可能将所有文件给所有用户访问,此时我们可以考虑如何为请求加上访问权限。
Nginx请求认证模块nginx-auth-request-module
Nginx模块添加
克隆nginx-auth-request-module模块源码到服务器
1 | git clone https://github.com/perusio/nginx-auth-request-module.git |
查看之前nginx的版本
1 | nginx/sbin/nginx -V |
可以看到configure arguments,重新下载对应版本的nginx,解压,进入解压nginx目录执行
1 | ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --conf-path=/usr/local/nginx/conf/nginx.conf --add-module=path_To_nginx-auth-request-module |
配置带有权限认证的文件服务器
修改conf/nginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37user root; # 修改用户为可以查看文件的用户
worker_processes 1;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 9999;
server_name _; # 名称不坐限制
location /images { # 匹配path
auth_request /auth; # 添加认证请求uri ------------------------- 添加请求认证
root /mnt/bd/data/marketing; # 文件所在主机根目录
autoindex on; # 开启文件索引
autoindex_exact_size on; # 显示文件大小
autoindex_localtime on; # 显示文件日期
}
location /auth { # 认证URI重定向到具体认证服务 ----------------添加请求认证
proxy_pass http://127.0.0.1:5000;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
}
}
开发/auth认证服务
略