【问题标题】:Nginx: X-Accel-Redirect not working in files with know MIME extensionNginx:X-Accel-Redirect 不适用于具有已知 MIME 扩展名的文件
【发布时间】:2014-06-03 15:21:01
【问题描述】:

我正在开发一个 webapp,X-Accel-Redirect 标头仅在没有扩展名的文件中工作正常。出于某种原因,如果我为文件名添加扩展名,X-Accel-Redirect 将不起作用。

工作示例:

X-Accel-Redirect: /protected_files/myfile01.z

非工作示例:

X-Accel-Redirect: /protected_files/myfile01.zip

我使用的是 nginx 1.7.1。

最初,奇怪的是,如果我用 mime.types 文件中未注册的内容更改扩展名部分(在本例中为“.zip”),它可以正常工作(显然我相应地重命名了文件),但是指向已知 mime 类型(例如“zip”、“jpg”、“html”)的扩展将生成“404 Not found”错误。

更新: 看来问题是由于我在 conf 文件中的这条规则:

location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
    try_files $uri =404;
}

由于某种原因,似乎 nginx 先测试文件系统中文件的存在,然后再尝试“内部/别名”路径。

关于如何让 nginx 过滤所有来自 X-Accel-Redirect 的“/protected_files”直接到“内部”而不是先尝试在其他路径中查找的任何想法?

提前致谢。

【问题讨论】:

  • 顺便说一句,我已经在 SO 看过类似的问题,但没有看到任何类似的问题。

标签: php nginx mime-types x-sendfile x-accel-redirect


【解决方案1】:

错误是由于 nginx 配置文件中的规则冲突。

所以,解决方案是:

location ^~ /protected_files { # ^~ needed according to the [nginx docs][1] to avoid nginx to check more locations
    internal;
    alias /path/to/static/files/directory;
}

#avoid processing of calls to unexisting static files by my app
location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
    try_files $uri =404;
}

希望这对你们中的许多人有所帮助。

【讨论】:

  • 解决方案到底是什么?该代码也有问题。
  • @MichaelRogers 解决方案是添加部分:location ^~ /protected_files
  • 谢谢!节省了我几个小时抨击(双关语)这件事
猜你喜欢
  • 1970-01-01
  • 2013-03-28
  • 2023-03-04
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
相关资源
最近更新 更多