我正试图通过nginx&提供静态内容使用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
所致。但是无法弄清楚是什么。有人可以帮我吗。最近几个小时我很震惊。
答案 0 :(得分:0)
我相信/readbook=/...
应为...=/readbook/
。
答案 1 :(得分:0)
您的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/;
...
}