设置nginx X-Accel-Mapping用于rails安全的静态内容交付



我试图通过nginx提供静态内容&rails使用X-Accel-Redirect。我实际的静态内容目录位于rails根文件夹,像这样

  - "rails_rootbookssources:book_idremaining_path".

只有rails_rootbookssources是恒定的,其余部分总是变化的。

交货
  -appbookssources111oepcover.html
  -appbookssources111oepimagesxx.png

我尝试使用以下配置设置nginx

    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上我正在做

 class ReaderController < ApplicationController
        def resource
           send_file "#{Rails.root}/books/sources/"+ params[:id] + "/" + params[:resource] + "." + params[:format]
        end
 end

它将文件信息返回给nginx,但似乎rails不理解我的配置的X-Accel-Mapping。所以当nginx试图读取文件时,会发生这个错误

ActionController::RoutingError (No route matches [GET])"/home/巫毒/工作/读者/书/资源/229/行动/cover.xml"):

我强烈认为这是由于incorrect X-Accel-Mapping in nginx。但不知道是什么。有人能帮我一下吗?

我认为/readbook=/...应该是...=/readbook/

您的X-Accel-Mapping配置错误,请尝试:

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/;
  ...
}

最新更新