进入网站设置 → "反向代理"选项卡
点击"添加反向代理"
填写代理名称(如
video-proxy
)目标URL填写你要代理的HTTP视频源地址,例如:
http://源站点.com/videos/
发送域名填写
$host
其他选项保持默认
使用PHP代理脚本
在网站目录下创建代理脚本,如video-proxy.php:
<?php // 验证请求来源 if (!isset($_SERVER['HTTP_REFERER']) || strpos($_SERVER['HTTP_REFERER'], 'https://你的站点.com') !== 0) { header('HTTP/1.1 403 Forbidden'); exit; } // 获取视频路径 $videoUrl = isset($_GET['url']) ? urldecode($_GET['url']) : ''; if (empty($videoUrl) { header('HTTP/1.1 400 Bad Request'); exit; } // 验证URL格式 $parsed = parse_url($videoUrl); if (!isset($parsed['host']) || !in_array($parsed['host'], ['允许的域名1.com', '允许的域名2.com'])) { header('HTTP/1.1 403 Forbidden'); exit; } // 设置适当的Content-Type $ext = pathinfo($parsed['path'], PATHINFO_EXTENSION); $contentTypes = [ 'mp4' => 'video/mp4', 'webm' => 'video/webm', 'ogg' => 'video/ogg' ]; header('Content-Type: '.($contentTypes[strtolower($ext)] ?? 'application/octet-stream')); // 转发请求 $context = stream_context_create([ 'http' => [ 'method' => 'GET', 'header' => "Accept-language: en\r\n" . "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)\r\n" ] ]); readfile($videoUrl, false, $context); ?>
<video controls> <source src="/video-proxy.php?url=http://源站点.com/path/to/video.mp4" type="video/mp4"> 您的浏览器不支持HTML5视频 </video>
PHP 代理(适合动态代理)这个方法可用,是Nginx 反向代理好还是PHP代理好
在HTTPS网站中引用HTTP视频时,Nginx反向代理和PHP代理都能解决问题,但两者有显著差异。以下是详细对比:
1. 性能对比
✅ Nginx反向代理:
直接由Web服务器处理,性能极高
适合高并发场景,可轻松处理大量视频请求
资源占用低,几乎没有额外开销
⚠️ PHP代理:
每次请求都要经过PHP解释器,性能较低
处理大文件时内存占用较高
并发能力受PHP-FPM配置限制
2. 适用场景对比
Nginx反向代理最适合:
长期稳定的视频代理需求
高流量网站
需要代理多个视频或整个目录
对性能要求高的场景
PHP代理最适合:
临时性解决方案
需要动态控制访问权限(如Token验证)
需要对请求做复杂逻辑处理
服务器无法修改Nginx配置的情况
3. 功能对比
特性 | Nginx反向代理 | PHP代理 |
---|---|---|
性能 | ⭐⭐⭐⭐⭐ | ⭐⭐ |
配置复杂度 | ⭐⭐ | ⭐⭐⭐ |
灵活性 | ⭐⭐ | ⭐⭐⭐⭐ |
防盗链处理 | ⭐⭐⭐ | ⭐⭐⭐⭐ |
大文件支持 | ⭐⭐⭐⭐⭐ | ⭐⭐ |
访问控制 | 有限 | 完全控制 |
4. 推荐选择方案
选择Nginx反向代理如果:
你使用的是宝塔面板等可视化工具
视频地址固定且长期使用
需要最佳性能和稳定性
视频文件较大或流量较高
选择PHP代理如果:
你需要动态生成代理地址
需要对每个请求进行权限验证
服务器无法修改Nginx配置
只是临时解决方案
5. 终极建议
最佳实践是结合使用两者:
对固定视频资源使用Nginx反向代理
对需要动态控制的场景使用PHP代理
在Nginx层做基础缓存,PHP层做访问控制
反向代理对服务器要求高吗,比如http的站点服务器在境外,是否需要境外的服务器做反向代理
反向代理服务器的要求取决于你的具体使用场景,特别是当源站(http站点)位于境外时,是否需要境外服务器做反向代理需要综合考虑多个因素。
一、反向代理对服务器的基本要求
1. 硬件要求
低流量场景(日PV<1万):
CPU:1-2核
内存:1-2GB
带宽:5-10Mbps
中高流量场景:
CPU:4核+
内存:4GB+
带宽:50Mbps+(视频流量需求较高)
2. 网络要求
境内代理境外:
国际出口带宽充足
与源站网络连通性好(ping值<200ms)
建议BGP线路服务器
二、境外源站是否需要在境外部署反向代理
方案对比
方案 | 部署位置 | 优点 | 缺点 | 适用场景 |
---|---|---|---|---|
境内代理境外 | 代理服务器在境内 | 终端用户访问快,合规性好 | 国际带宽成本高,可能卡顿 | 用户主要在境内,对速度要求高 |
境外代理境外 | 代理服务器在境外(靠近源站) | 代理服务器与源站连接稳定 | 境内用户访问延迟高 | 用户分布全球或主要在境外 |
双节点代理 | 境内+境外各部署代理 | 兼顾访问速度和源站连接 | 架构复杂,成本高 | 大型商业项目,不差钱 |
推荐方案选择
如果用户主要在境内:
优先选择境内服务器做反向代理
推荐阿里云/腾讯云的香港节点(国际带宽好,到内地延迟低)
配置优化:
proxy_connect_timeout 60s;proxy_read_timeout 300s;proxy_send_timeout 300s;
如果用户全球分布:
使用CDN+境外代理服务器组合
推荐Cloudflare的Argo Smart Routing
如果源站限地区访问:
必须在可访问源站的地区部署代理
可考虑AWS Lightsail的东京/新加坡节点
三、跨国反向代理优化技巧
1. TCP连接优化
proxy_socket_keepalive on;proxy_http_version 1.1;proxy_set_header Connection "";
2. 缓存优化(减少跨国请求)
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:100m inactive=7d use_temp_path=off;location / { proxy_cache my_cache; proxy_cache_valid 200 302 12h; proxy_cache_lock on;}
3. 协议优化
# 启用HTTP/2提升传输效率proxy_http_version 1.1;proxy_set_header Connection "";
4. 带宽节省方案
# 启用gzip压缩(对非视频内容)gzip on;gzip_types text/plain application/xml;gzip_proxied any;
性能监控命令:
# 实时监控带宽iftop -i eth0 -n -P# 查看TCP连接状态ss -s# 监控Nginx代理耗时awk '{print $1,$NF}' /var/log/nginx/proxy-access.log | sort | uniq -c
五、推荐服务器配置
中等流量视频代理建议配置:
境内服务器:阿里云香港轻量(24元/月)
CPU:2核
内存:2GB
带宽:30Mbps
流量:1TB/月
境外服务器:AWS Lightsail东京($5/月)
CPU:1核
内存:1GB
带宽:不限
流量:1TB/月
实际选择应根据你的预算和用户分布情况做调整。对于初期项目,可以先从低配开始,根据监控数据逐步升级。
反向代理的流量路径解析(视频播放场景)
在反向代理播放视频时,流量路径是开发者最关心的问题之一。以下是详细分析:
一、流量路径示意图
二、流量路径关键点
上行流量(用户→代理→源站)
只传输请求头和控制信息
流量很小(通常<1KB/请求)
下行流量(源站→代理→用户)
视频数据全部经过你的代理服务器
流量=视频文件大小×请求次数
三、流量计算示例
假设一个视频:
大小:100MB
每日播放:1000次
流量消耗:
你的服务器流量 = 100MB × 1000 = 100GB/天 ≈ 3TB/月(仅此一个视频)
四、三种代理模式对比
模式 | 配置方式 | 流量路径 | 你的服务器带宽消耗 | 适用场景 |
---|---|---|---|---|
完全代理 | proxy_pass直接转发 | 用户↔你的服务器↔源站 | 100%视频流量 | 需要修改响应内容 |
302重定向 | return 302源站URL | 用户直接访问源站 | 仅重定向请求 | 源站支持HTTPS时 |
流媒体代理 | 使用X-Accel-Redirect | 前半段走代理,内容直连 | 约30%流量 | 大型视频站点 |
五、优化方案推荐
方案1:完全代理优化(节省带宽)
location /videos/ { proxy_pass http://源站/videos/; # 启用缓存减少回源 proxy_cache video_cache; proxy_cache_valid 200 302 24h; proxy_cache_key $uri$is_args$args; # 范围请求支持(允许视频拖放) proxy_set_header Range $http_range; proxy_http_version 1.1;}
方案2:智能分流(推荐)
location /videos/ { # 小文件走代理 if ($request_uri ~* \.(mp4|mov)$) { return 302 http://cdn.源站.com$request_uri; } # 其他请求正常代理 proxy_pass http://源站/;}
方案3:P2P加速(大幅降低带宽)
<!-- 前端使用WebRTC实现P2P分发 --><script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script><video id="video" controls></video><script> if(Hls.isSupported()) { var video = document.getElementById('video'); var hls = new Hls({ enableWorker: false }); hls.loadSource('/proxy/p2p/video.m3u8'); hls.attachMedia(video); }</script>
六、跨国代理特别建议
带宽成本对比
阿里云国际带宽:约¥80/Mbps/月
AWS CloudFront:约¥0.14/GB
推荐架构
用户 → 境内CDN(缓存热片) → 境外代理服务器 → 源站
成本优化配置
# 按文件类型分流map $uri $backend { ~\.(mp4|flv)$ http://境外代理服务器; default http://境内缓存服务器;}server { location / { proxy_pass $backend; }}
七、监控与调优
实时监控命令
# 查看实时流量iftop -i eth0 -n -P# 查看代理连接状态ss -tulnp | grep nginx# 分析流量类型goaccess /var/log/nginx/access.log -o report.html
报警阈值建议
带宽利用率 >70% 持续5分钟
并发连接数 >1000
内存使用 >80%
对于视频播放场景,如果源站本身可以直连,建议优先考虑302重定向方案;如需内容过滤或访问控制,则选择完全代理但务必做好缓存优化。