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进行请求地址。