使用X-Sendfile来屏蔽静态文件的位置

时间:2013-11-24 17:16:01

标签: php video nginx x-sendfile

我在我的网站上提供付费视频,仅供会员使用。目前,我正在通过PHP脚本进行整个身份验证和视频流,但是它倾向于使用大量资源,我想使用nginx来实际提供文件。为此,我发现你必须从你的PHP脚本发送X-Accel-Redirect标题,然后将文件提供给nginx。

但是,有一个问题,要流式传输的视频的网址不是由与此网站相同的服务器提供的。它来自我的其他网站之一,它完全位于不同的VPS服务器(和域)上。无论如何,我尝试了这个简单的测试脚本:

<?php

header('X-Accel-Redirect: http://other-site.com/protected/videos/test.mp4');

但我不知道在我的nginx配置中使用什么来提供http://other-site.com/protected/videos/test.mp4的文件,同时仍然隐藏用户的原始视频网址。

当我访问上面的测试脚本时,nginx返回404 Not Found,错误日志的条目如下:

open() "/var/www/site.com/web/publichttp://other-site.com/protected/videos/test.mp4" failed (2: No such file or directory)

因此,nginx显然试图将http://other-site.com/protected/videos/test.mp4解析为网站文档根目录中的路径,而不是认识到它是另一个位置的资源而只是“代理”该文件。

任何人都有任何关于让它工作的提示吗?

2 个答案:

答案 0 :(得分:1)

我相信你正试图代理那个mp4。我想问题出在nginx服务器的配置中。

看看这个模块:

http://wiki.nginx.org/HttpProxyModule

答案 1 :(得分:0)

使用nginx通过X-Accel-Redirect转发静态文件通常是针对本地托管的资源....但我确实发现了这一点,我认为这正是您所寻找的:Use Nginx to proxy files from remote location using X-Accel-Redirect