问题标签 [x-accel-redirect]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3592 浏览

django - Serving protected files with Django and Nginx X-accel-redirect

I'm trying to get Nginx and Django to play together to serve downloadable protected files. I just cannot get it to work. Here's my Nginx config:

the relevant urls.py for viewing the file(s):

my view:

I have 2 values in my settings file:

_convert_file_to_url() takes the full file path and, using the two settings values above, turns it into a url that (I thought) Nginx would allow:

So, if I try to access:

In my browser window, it doesn't allow it (404). Good.

BUT - if I try to access that url from a form download, which I want to allow, I get a redirect in the browser to:

and it's a 404 as well.

I've tried so many different configurations my brain now hurts. :-)

Should I not be reading the file with open(), and let Nginx serve it? If I remove that line, it returns a file with the dreaded zero bytes. Why do I still get a 404 on the redirected url??

0 投票
1 回答
620 浏览

nginx - Nginx 做一个 proxy_pass 来完成 URL

我的 servlet 正在发送一个带有完整 URL 的 X-Accel-Redirect,例如 /cached/ http://example.com/test/index.html。它必须是完整的 URL,因为我们的业务逻辑决定了资源在网络上的位置。

我希望 nginx 从http://example.com/test/index.html下载内容,并像它来自原始 URL 请求一样提供服务。因此,我不想进行重写(或重定向)。我正在尝试下面提到的conf,但它不起作用。

有什么方法可以使用匹配 URI 中的绝对 URL 并对其执行 proxy_pass 吗?提前致谢。

0 投票
0 回答
255 浏览

django - Nginx x-accel-redirec 重定向错误

我正在使用 x-accel-redirec 标头和 Nginx 提供由我的 django 服务器处理的图像。但是,这种行为真的很奇怪,因为有时我得到图像,有时 Nginx 将图像 URI 重定向到我的 Django (uwsgi) 应用程序,当然,我得到一个 404。我的配置如下:

当我多次刷新时,相同的 URL 会发生这种行为。当我从 Django 收到 404 错误消息时,它说:“当前 URL,home/bob/images/image3.jpg,与这些都不匹配。”

在带有 mod_xsendfile 的 apache 中,它运行良好。请帮忙

0 投票
0 回答
1374 浏览

django - 使用 nginx、django 下载文件

我目前正在编写一个使用 nginx 服务的小型个人使用网站,使用 uwsgi、django 和 bootstrap。一切都很顺利,除了一个我无法弄清楚的问题。我在网站上有下载链接(按钮),点击后应该会启动文件下载。这是按下按钮时执行的视图:

/media/files 直接由 nginx 作为内部位置提供服务:

如何使用分配给每个按钮的 onclick 事件调用此视图:

我有一个带有单个隐藏字段的表单。这被设置为按下的按钮的 id (uuid)。

很简单吧?我的问题是,当按下下载按钮时,下载没有正确启动。用户不会收到保存对话框提示,文件也不会开始自动下载(Chrome 或 Safari)。相反,在调试工具中,我可以看到文件下载到浏览器中的本地存储或某个内存位置(这些是大文件;> 1GB)。我看到内存在膨胀,最终浏览器会崩溃。任何线索我在这里做错了什么?根据我一直在阅读的内容,这应该可以正常工作。

0 投票
0 回答
278 浏览

ruby-on-rails - Rails 应用程序的 Nginx X-Accel-Redirect 配置

在为 nginx 设置 X-Accel-Redirect 的所有教程中,总是有一些关于指示某个位置是私有的,如下所示:

我发送给用户的文件位于 RAILS_ROOT/private_uploads 中。这不在公用文件夹内,这意味着没有直接指向此文件夹中文件的 URL。

那么我是否正确假设我可以忽略我的设置的那一点 nginx 配置?如果没有,我需要什么配置?

我正在使用Passenger,顺便说一句,我的配置非常基本:

0 投票
1 回答
1930 浏览

node.js - Nginx X-Accel-Redirect 不适用于 node.js

我正在尝试在由 node.js 支持的 nginx 上设置授权文件访问。出于某种原因,所有示例都不适合我。我正在尝试从/data/private/files

我的 nginx 配置:

我的节点 server.js:

当我请求时http://localhost:4000/xyz,请求被正确传递到节点。当我请求时,http://localhost:4000/files/test.jpg我只得到一个 404 并且没有任何东西传递给节点。我究竟做错了什么?当我推荐时internal,test.jpg 直接由 nginx 正确提供,所以我假设路径是正确的?

我很确定我之前在某个时候有过这个工作,但是在某个不同的服务器上可能有不同的节点和 nginx 版本。尝试使用 nginx 1.6.0 和 1.2.6,节点 v0.10.21。我还添加了您在所有示例中找到的所有 proxy_set_header 和 proxy_pass 选项,但没有任何效果。我现在正在基于 Vagrant 的 Ubuntu VM 中运行它,但也不能在 Mac 上运行。

我知道我必须通过 设置标头res.setHeader("X-Accel-Redirect", req.url);,但这不是这里的问题,因为我什至没有进入可以在 node.js 中设置所需标头的阶段。

0 投票
1 回答
2585 浏览

php - Nginx:X-Accel-Redirect 不适用于具有已知 MIME 扩展名的文件

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

工作示例:

非工作示例:

我正在使用 nginx 1.7.1。

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

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

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

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

提前致谢。

0 投票
2 回答
9110 浏览

ruby-on-rails - 将自定义 HTTP 标头添加到 nginx X-Accel-Redirect

我正在使用X-Accel-Redirectnginx 在 Rails 中提供受限下载。为了验证我在客户端应用程序中的下载,我尝试将非标准 HTTP 标头中的校验和发送Content-MD5X-Accel-Redirect请求。但这不起作用。

在用于进行重定向的 rails 片段下方

这是 nginx 部分

这显然不起作用。我无法在回复中获取 Content-MD5 标头。有什么方法可以从 Rails 传递我的 Content-MD5 标头吗?

我知道有一些方法可以完全在 nginx 中做到这一点,比如用 perl 或 lua 编译 nginx 并轻松计算 MD5。但我不想那样做。

任何帮助深表感谢。

0 投票
1 回答
3893 浏览

ruby-on-rails - Nginx 将上游标头传递给远程请求

这个问题与这个问题类似,x-accel-redirect资源上aws s3做。前者试图将上游标头设置为本地请求。这工作正常。但是现在我已经将我的内容移动到了 amazon s3 并且我想对 s3 对象实现相同的受限下载。

这是我的 nginx 配置

轨道部分是

一切正常,除了Content-MD5没有传递给代理请求。

非常感谢任何帮助。

另一个类似的问题在这里

0 投票
1 回答
843 浏览

php - 带有正则表达式内部位置的 nginx X-Accel-Redirect 导致 301

我对 nginx 有下一个问题。我设置了代码来提供安全文件。这是重定向请求的 PHP 代码:

和 check_url 函数:

然后我有这样的nginx配置:

这一切都有效。但我尝试了更好的(对我而言)配置,我可以在配置中为不同的文件类型设置单独的目录:

对http://unexisting.com/file/....../54agda0g8.flv的请求将我重定向到http://unexisting.com/film/54agda0g8.flv/

天哪,为什么?如果您需要现场示例,请告诉我。