0%

Nginx搭建建议有权限的文件服务器

简易文件服务器设计与搭建

背景

​ 近期由于项目需要,分布式系统需要使用一个文件服务器,由于项目初期,出于成本,运维考虑,暂时排除掉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
    29
    user  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
2
3
4
5
6
7
nginx/sbin/nginx -V

nginx version: nginx/1.10.3
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --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

​ 可以看到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
    37
    user  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认证服务

​ 略