使用nginx作为上传/下载服务器

配置上传服务器

源码编译安装

  • nginx官方下载源码

  • 解压、编译并安装

    1
    2
    3
    4
    5
    6
    tar zxvf nginx-1.22.0.tar.gz
    cd nginx-1.22.0
    # 编译 必须指定 --with-http_dav_module --user和--group分别指定了运行nginx的用户和组。--prefix指定安装到/usr/local/nginx目录下
    ./configure --prefix=/usr/local/nginx --user=root --group=root --with-http_stub_status_module --with-http_ssl_module --with-http_dav_module
    # 安装
    make && make install

    修改配置文件

    由于上一步编译安装在/usr/local/nginx 目录下,所以执行以下命令编辑
    vim /usr/local/nginx/conf/nginx.conf
    修改server模块内容如下

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
server {
# 监听本地10080端口
listen 10081 default_server;
listen [::]:10081 default_server;
server_name localhost;
# 上传最大文件尺寸为1G
client_max_body_size 1024m;
location / {
# 根目录位置为安装目录下的html目录
root html;
index index.html index.htm;
}

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

location /myupload/ {
# nginx数据下载时使用的临时目录
client_body_temp_path /root/upload/tmp 1;
# 文件的上传目录,nginx服务用户要有写的权限
alias /root/upload/;
autoindex on;
# 默认是关闭PUT功能的,添加这行开启,curl -T 时使用put上传
dav_methods PUT;
}
}

创建依赖目录并启动nginx

创建nginx上传临时目录 和存储目录

1
2
3
mkdir -p /root/upload/tmp
# 此目录权限必须和源码编译时指定的用户和组一致,否则上传失败
chown -R root:root /root/upload

启动nginx

1
2
3
4
5
6
# 启动命令
/usr/local/nginx/sbin/nginx
# reload命令
/usr/local/nginx/sbin/nginx -s reload
# 停止
/usr/local/nginx/sbin/nginx -s stop

验证

创建本地上传文件aaa.log ,执行以下命令上传文件, 将发现aaa.log 存放在/root/upload/目录下

1
curl -v -T aaa.log http://127.0.0.1/myupload/

下载服务器

在上述上传服务器配置建立后,在location / 模块下的root html;说明配置当前nginx的服务根目录为/usr/local/nginx/html
可以在此目录建立一个文件下载目录的软连即可实现文件下载功能

1
2
3
4
# 下载文件的真实存储目录
mkdir -p /root/downfiles/
cd /usr/local/nginx/html
ln -s /root/downfiles/ files

验证下载

在/root/downfiles/目录下放置一个文件aaa,发起以下请求获取文件

1
wget  http://127.0.0.1:10080/files/aaa

疑问

  • 当直接使用/upload/替换/myupload/作为上传uri时,curl -T 会返回405错误.

    参考

    1
    https://www.cnblogs.com/zou-xiyuan/p/15421375.html

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!