求助:通过FFmpeg -headers指令配置仅允许指定域名访问流的问题
求助:通过FFmpeg -headers指令配置仅允许指定域名访问流的问题
嘿,我来帮你梳理下这个问题!首先得纠正你用FFmpeg -headers 参数的一个小误区——你多次调用 -headers 是不对的,FFmpeg的这个参数是一次性传入所有HTTP头信息,多次使用会覆盖之前的设置,这也是你当前配置不生效的核心原因之一。
正确的FFmpeg headers写法
你需要把所有CORS头放在同一个 -headers 参数里,每个头单独占一行(不同系统的分隔方式略有区别)。给你一个通用的正确写法:
ffmpeg -headers $'Access-Control-Allow-Credentials: true\nAccess-Control-Allow-Methods: OPTIONS, GET, POST, HEAD\nAccess-Control-Allow-Origin: https://example.net' [你的其他FFmpeg推流/拉流参数]
(注:如果是Windows命令行环境,把$'...'换成双引号,用\r\n来分隔每条头信息)
关于限制访问的关键补充
不过要提醒你:CORS头只是用来约束浏览器的跨域请求行为,没法真正阻止非浏览器工具直接调用你的流地址。如果想彻底实现“仅允许你的网站访问”,还需要配合XUI的反向代理或者服务器层面的规则(比如用Nginx)来做来源校验,两种常见方案:
- 校验请求的
Referer头,只允许来自https://example.net的请求; - 更安全的方式是给流地址添加签名验证,只有携带有效签名的请求才能访问。
举个Nginx反向代理的配置例子(如果用Nginx转发流请求):
location /your-stream-endpoint { # 仅允许指定域名的请求访问 valid_referers https://example.net; if ($invalid_referer) { return 403 Forbidden; } # 转发到FFmpeg的流服务地址 proxy_pass http://your-ffmpeg-stream-url; }
这样结合起来,既能让你的网站正常跨域访问流,又能从服务器层面拦截非法请求。
备注:内容来源于stack exchange,提问作者FARIS ISMAIL




