Laravel无法播放Nginx服务器外部视频的问题求助
解决Laravel网站播放外部Nginx视频链接的问题
问题场景
现有一台存储视频的Nginx服务器,视频链接为 http://1.1.1.1/video.mp4;在另一套Laravel搭建的网站中,尝试通过控制器传递该外部链接到Blade模板播放视频,但使用外部链接时无法播放,改用内部链接(如/video/video.mp4)则正常。
相关代码如下:
控制器代码
public function index(Request $request) { $url = url('http://1.1.1.1/video.mp4'); return view('blog.index', compact('url')); }
Blade模板视频模块代码
<video poster="video.jpg" src={{ $url }} ></video>
排查与解决方案
1. 修正URL传递逻辑
Laravel的url()函数会将传入的外部URL拼接为当前站点的URL(例如将http://1.1.1.1/video.mp4转为http://你的Laravel域名/http://1.1.1.1/video.mp4),导致链接无效。直接传递原始URL即可:
public function index(Request $request) { $url = 'http://1.1.1.1/video.mp4'; return view('blog.index', compact('url')); }
2. 修复模板标签属性格式
Blade模板中src={{ $url }}未加引号,可能导致浏览器解析错误,需补充双引号:
<video poster="video.jpg" src="{{ $url }}"></video>
3. 配置Nginx跨域规则(CORS)
若Laravel站点与Nginx视频服务器为不同域名,浏览器会因跨域策略阻止视频加载。在Nginx对应视频文件的server块中添加以下配置:
location /video.mp4 { # 替换为你的Laravel站点域名,生产环境不建议用* add_header Access-Control-Allow-Origin "http://你的Laravel站点域名"; add_header Access-Control-Allow-Methods "GET, OPTIONS"; add_header Access-Control-Allow-Headers "Range"; }
配置后重启Nginx服务。
4. 验证文件权限与Nginx配置
- 确保Nginx服务器上的
video.mp4文件权限为644,所属用户组为Nginx运行用户(如www-data); - 检查Nginx的
server配置中,是否通过root或alias正确指向视频存储目录,且未设置访问限制。
内容的提问来源于stack exchange,提问作者Mehdi Bakhtiari
相关产品推荐
相关产品推荐

