Nginx部署本地下载服务器
最近在工作中经常需要将本地的一些文件上传到服务器,然而对于一些连接不太稳定、通信带宽较低的服务器,使用xshell、Mobaxterm等工具上传文件时,走SFTP协议可能会经常上传中断,让人很是恼火,为了解决这个问题,我找了一台和目标服务器正常通信且能建立稳定连接的服务器,在上面部署了nginx,然后通过配置制作简易文件下载服务器来实现文件的可靠传输。下面讲讲具体操作:
1.宿主机方式实现
安装nginx后,一般需要在 /etc/nginx/ 下修改配置文件,主要配置在 /etc/nginx/nginx.conf 文件中,我们新增配置一般在 /etc/nginx/conf.d/ 目录下,因为主要配置中会包含该目录下的所有配置:
...
include /etc/nginx/conf.d/*.conf;
...
首先,在Nginx默认目录下 /usr/share/nginx/html 下新建 downloads 目录,作为文件下载目录,然后将需要传输的文件放入该目录中。
mkdir -p /usr/share/nginx/html/downloads
然后在 /usr/share/nginx/html/ 目录下新建 download.html 文件,作为文件下载页面:
sudo tee /usr/share/nginx/html/download.html > /dev/null << 'EOF'
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>文件下载中心</title>
</head>
<body>
<h1>文件下载中心</h1>
<p>点击下面的链接进入文件目录:</p>
<a href="/downloads/">进入下载目录</a>
</body>
</html>
EOF
然后,在配置文件目录下新增 download.conf 文件:
sudo tee /etc/nginx/conf.d/download.conf > /dev/null <<'EOF'
server {
listen 19002;
server_name _;
location /downloads/ {
root /usr/share/nginx/html;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
location ~ ^/downloads/.+\..+$ {
root /usr/share/nginx/html;
add_header Content-Disposition "attachment";
}
location = /download.html {
root /usr/share/nginx/html;
}
}
EOF
写好配置文件之后,就是一个两步走:
第一步,测试配置文件是否正确
nginx -t
第二部,重新加载配置文件
nginx -s reload
这样就好了,通过访问http://<your-ip>:端口号/download.html 就可以进入下载页面,点击超链接跳转到文件下载列表,通过文件的URL就可以实现稳定的文件传输。
2.容器方式实现
首先,拉取nginx镜像:
docker pull nginx:latest
创建需要挂载的目录:
mkdir -p /data/nginx/conf
mkdir -p /data/nginx/log
mkdir -p /data/nginx/html
启动容器获取配置文件:
## 临时启动容器
docker run --name nginx -p 19001:80 -d nginx-tmp
## 将容器nginx.conf文件复制到宿主机
docker cp nginx-tmp:/etc/nginx/nginx.conf /data/nginx/conf/nginx.conf
## 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx-tmp:/etc/nginx/conf.d /data/nginx/conf/conf.d
## 将容器中的html文件夹复制到宿主机
docker cp nginx-tmp:/usr/share/nginx/html /data/nginx/
## 删除正在运行的容器
docker rm -f nginx-tmp
获取完配置文件之后,可以正式启动容器了(先启动容器再修改配置文件)
docker run \
-p 19002:80 \
--name nginx \
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /data/nginx/log:/var/log/nginx \
-v /data/nginx/html:/usr/share/nginx/html \
-d nginx:latest
相同地,可以按照上面的内容去修改配置文件。
如果在部署过程中出现了什么问题,可以通过 docker logs nginx -f 查看日志,但是这样可能不会有多少关键错误信息,我更推荐直接去看nginx服务的日志,方法也很简单:
tail -f log/error.log
但是我通过容器部署后,直接访问文件列表会报403,通过文件名称倒是可以直接访问,暂时没有找到好的解决办法,目前也满足业务基本需求,后面有机会再研究这个问题。