nginx 配置反向代理作为文件服务使用
业务场景
前提,不知道服务器的账号密码,
目的,想快速的进行服务器之间的文件传输
想到了使用文件服务器,在当前服务器请求目标服务器的文件
wget http://127.0.0.1:3334/file/xxx.jar
感觉只是为了文件的传输去搭建一个文件服务器,感觉有点大材小用。
那么,我就想到了nginx是不是可以反向代理到服务器的指定目录中,进行文件的绝对路径下载?
以下是nginx.conf的部分配置文件,将此段进行配置即可
server {
listen 3334;
server_name localhost;
client_max_body_size 100M;
#开启长连接后,返回客户端的会话保持时间为60s,单次长连接累计请求达到指定次数请求或65秒就会被断开,后面的60为发送给客户端应答报文头部中显示的超时时间设置为60s:如不设置客户端将不显示超时时间。
keepalive_timeout 65 60;
#在一次长连接上所允许请求的资源的最大数量
keepalive_requests 100;
# 测试用
location / {
default_type application/json;
add_header Content-Type 'application/javascript; charset=UTF-8';
return 200 '{"code":201,"data":{},"msg":"成功","total":0}';
}
location /file {
root /root/app/nginx/apps/app01;
# add_header Content-Disposition "attachment";
autoindex on;
autoindex_exact_size off;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
想防止浏览器自动打开文件而不是下载文件,添加
add_header Content-Disposition "attachment";
// 所有文件都不打开,且支持改名,改名时的访问格式如下所述
location / {
add_header Content-Disposition "attachment;filename*=utf-8'zh_cn'$arg_n";
}
一般存储在服务器上的文件都不会用原来的名字,所以下载的时候需要改名,可通过url中添加参数,然后在nginx中根据参数来改名。
举例:参数为 n=xxx.jpg
url:https"//xxxxx?n=xxx.jpg //表示把下载下来的文件名字改为xxx.jpg
nginx需要配置成
location / {
if ($request_uri ~* ^.*\?n=([^&]+)$) {
add_header Content-Disposition "filename*=$arg_n";
}
}
支持改名和访问时不打开文件<有时候,我们经常会遇到直接访问.txt文件的时候,就直接在浏览器里打开了,其实我们想要的是下载>
location / {
if ($request_uri ~* ^.*\?n=([^&]+)$) {
add_header Content-Disposition "attachment;filename*=$arg_n";
}
}
我将服务器的绝对路径进行代理出来。使用http访问的时候,可以写入脚本,从外部输入变量进行文件名的写入。基于扩展,我可以在Jenkins服务编译后的文件包存放,然后,在各个服务器中使用wget进行请求地址。