1

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

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

只有那个rails_root\books\sources是不变的,其余的部分总是在变化的。前任

  -app\books\sources\111\oep\cover.html
  -app\books\sources\111\oep\images\xx.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。在铁轨上做

 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 (没有路由匹配 [GET] "/home/voodoo/work/reader/books/sources/229/OPS/cover.xml"):

我坚信这是由于incorrect X-Accel-Mapping in nginx. 但想不通是什么。有人可以帮我吗。在过去的几个小时里,我对此感到震惊。

4

2 回答 2

0

Your X-Accel-Mapping configuration is wrong, try this:

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/;
  ...
}
于 2013-02-28T16:35:03.907 回答
0

我相信/readbook=/...应该是...=/readbook/

于 2013-01-24T18:19:37.610 回答