Ruby on rails 为rails安全静态内容交付设置nginx X-Accel-Mapping

Ruby on rails 为rails安全静态内容交付设置nginx X-Accel-Mapping,ruby-on-rails,nginx,Ruby On Rails,Nginx,我正在尝试使用X-Accel-Redirect通过nginx和rails提供静态内容。我的实际静态内容目录位于rails根文件夹中,如下所示 - "rails_root\books\sources\:book_id\remaining_path". 只有rails\u root\books\sources是常量,其余部分总是变化的。前 - "rails_root\books\sources\:book_id\remaining_path". -app\books\sources\

我正在尝试使用
X-Accel-Redirect
通过nginx和rails提供静态内容。我的实际静态内容目录位于rails根文件夹中,如下所示

  - "rails_root\books\sources\:book_id\remaining_path".
只有
rails\u root\books\sources
是常量,其余部分总是变化的。前

  - "rails_root\books\sources\:book_id\remaining_path".
  -app\books\sources\111\oep\cover.html
  -app\books\sources\111\oep\images\xx.png
我尝试使用以下配置设置nginx

  - "rails_root\books\sources\:book_id\remaining_path".
    location ~ /readbook/*./.* {
      internal;
      alias /home/vooodoo/work/reader/books/sources/$1/$2;
    }

    location / {
      proxy_redirect    off;

      proxy_set_header  Host              $http_host;
      proxy_set_header  X-Real-IP         $remote_addr;
      proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;

       proxy_set_header  X-Sendfile-Type   X-Accel-Redirect;
      proxy_set_header  X-Accel-Mapping   /readbook/=/home/vooodoo/work/reader/books/sources/;

      proxy_pass http://127.0.0.1:3001/;
    }
它成功地检测到请求并将其传递给rails。在轨道上,我在做什么

  - "rails_root\books\sources\:book_id\remaining_path".
 class ReaderController < ApplicationController
        def resource
           send_file "#{Rails.root}/books/sources/"+ params[:id] + "/" + params[:resource] + "." + params[:format]
        end
 end
class ReaderController
它将文件信息返回给nginx,但rails似乎不理解我的配置的X-Accel映射。因此,当nginx尝试读取文件时,会发生此错误

  - "rails_root\books\sources\:book_id\remaining_path".
ActionController::RoutingError(没有与[GET]匹配的路由) “/home/voodoo/work/reader/books/sources/229/OPS/cover.xml”):

  - "rails_root\books\sources\:book_id\remaining_path".

我坚信这是由于nginx中的
不正确的X-Accel映射造成的。但我想不出是什么。有人能帮帮我吗。在过去的几个小时里,我一直对此感到震惊。

我认为
/readbook=/…
应该是
..=/readbook/
您的
X-Accel-Mapping
配置错误,请尝试以下操作:

  - "rails_root\books\sources\:book_id\remaining_path".
location ~ /readbook/*./.* {
  internal
  alias /home/vooodoo/work/reader/books/sources/$1/$2;
}

location / {
  ...
  proxy_set_header X-Sendfile-Type X-Accel-Redirect;
  proxy_set_header X-Accel-Mapping /home/vooodoo/work/reader/books/sources/=/readbook/;
  ...
}

你能找到解决办法吗?