Nginx错误日志中的消息“X-Accel-Mapping标头丢失”

前端之家收集整理的这篇文章主要介绍了Nginx错误日志中的消息“X-Accel-Mapping标头丢失”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我在Ubuntu 8.04上使用Nginx 1.0.0和Passenger 3.0.7运行Rails 3站点.

在我的Nginx error.log中,我开始看到消息X-Accel-Mapping标头丢失了很多.谷歌搜索引导我到Rack::SendfileNginx docs的文档.

现在,我的应用程序可以通过多个域访问,我在我的应用程序中使用send_file来提供特定于它们所请求的域的一些文件,例如,如果你来到domain1.com/favicon.ico我查找了favicon在public / websites / domain1 / favicon.ico.
这工作正常,我认为我不需要/想要让Nginx参与并创建一些私有区域,我存储这些文件,如Rack::Sendfile docs中的样本所示.

我怎样才能摆脱错误信息?

此消息表示Rack :: Sendfile已禁用X-Accel-Redirect,因为您在Nginx.conf中缺少配置…

我正在使用Nginx Passenger 3 Rails 3.1.

从这个页面收集的信息我已经弄明白了:

http://wiki.nginx.org/X-accel

http://greenlegos.wordpress.com/2011/09/12/sending-files-with-nginx-x-accel-redirect

http://code.google.com/p/substruct/source/browse/trunk/gems/rack-1.1.0/lib/rack/sendfile.rb?r=355

Serving Large Files Through Nginx via Rails 2.3 Using x-sendfile

我有控制器将映射/下载/ 1请求映射到具有自己的目录结构的存储文件,如:storage / 00/00/1,storage / 01 / 0f / 15等.所以我需要通过Rails传递它,但是然后我需要使用send_file方法,它将使用X-Accel-Redirect直接通过Nginx将最终文件发送到浏览器.

代码中我有这个:

send_file(
  '/var/www/shared/storage/00/00/01',:disposition => :inline,:filename => @file.name # an absolute path to the file which you want to send
)

我为此示例目的替换了文件

现在我必须将这些行添加到我的Nginx.conf中:

server {
    # ... 

    passenger_set_cgi_param HTTP_X_ACCEL_MAPPING /var/www/shared/storage/=/storage/; 
    passenger_pass_header X-Accel-Redirect;

    location /storage {
      root /var/www/shared;
      internal;
    }

    # ...
}

从外部世界看不到路径/存储,它只是内部的.

Rack :: Sendfile获取头X-Accel-Mapping,从中提取路径并用/ storage替换/ var / www / shared / storage ….然后它吐出修改后的头:

X-Accel-Redirect: /storage/00/00/01

然后由Nginx处理.

我可以看到这个工作正常,因为文件下载速度比以前快100倍,并且日志中没有显示错误.

希望这可以帮助.

原文链接:https://www.f2er.com/nginx/435025.html

猜你在找的Nginx相关文章