两个位置的Nginx X-Accel-Mapping标头

时间:2017-03-03 07:17:24

标签: ruby-on-rails nginx

某些背景信息:

我希望能够从Rails应用程序触发文件下载,并使文件由Nginx下载。

我可以将其用于一个文件夹,但不能用于两个不同的文件夹。

我正在使用以下内容:

# nginx config 

location /filestorage/ {
  internal;
  alias   /mnt/filestorage/;
}

proxy_set_header  X-Accel-Mapping       /mnt/filestorage/=/filestorage/;

# controller code (e.g. app/controllers/downloads_controller.rb)
send_file('/mnt/filestorage/my_file.zip')

我尝试过以下内容来支持其他文件夹:

location /filestorage/ {
  internal;
  alias   /mnt/filestorage/;
}

location /filestorage2/ {
  internal;
  alias   /mnt/filestorage/;
}

proxy_set_header  X-Accel-Mapping "/mnt/filestorage/=/filestorage/ /mnt/filestorage2/=/filestorage2/";

# controller code (e.g. app/controllers/downloads_controller.rb)
send_file('/mnt/filestorage/my_file.zip')
send_file('/mnt/filestorage2/another_file.zip')

然而,这并不起作用,并且两个文件夹中的所有文件都不可用。

有没有办法将位置传递给X-Accel-Mapping标头?

1 个答案:

答案 0 :(得分:0)

太晚了,但是可能是这样的。 (在application.rb或初始化程序中)

config.middleware.swap(
  ::Rack::Sendfile,
  ::Rack::Sendfile, 'X-Accel-Redirect',
  [['file_path', 'nginx_internal'],
   ['....','.....']]  

)