我试图通过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/;
...
}