前言:不仅是搭建,更是避坑

很多朋友在尝试将 Xiaoya Alist 接入网易爆米花 (Popcorn) 等播放器时,都会遇到一堆玄学问题:

  • 🔴 播放失败/403 Forbidden:明明密码是对的,WebDAV 就是连不上或报错。
  • 🔴 只有声音没画面:某些 4K 视频解析异常。
  • 🔴 服务器 CPU 100% 卡死:网上找的自动修复脚本,因为逻辑缺陷(频繁全盘扫描文件),导致服务器后台无限循环,直接卡崩。

本教程基于真实的踩坑经历,提供一套“资源安全型”的最终解决方案。我们不仅要解决播放问题,还要确保服务器稳定运行,重启不掉线。

核心原理

为什么网易爆米花这么难伺候?因为它对 WebDAV 认证 (Auth)Strm 内部链接 的处理非常挑剔。

  • 针对认证问题:我们不再依赖客户端发送密码,改为在服务器端 Nginx 自动注入认证头 (Authorization Header),让服务器“免密”放行。
  • 针对 Strm 问题:由于爆米花无法解析 xiaoya.host 这种内网占位符,我们需要将几十万个 Strm 文件批量替换为真实的公网 IP。

第一步:Strm 文件公网 IP 替换 (一次性操作)

⚠️ 避坑预警:不要把这个命令放在定时任务里!几十万个文件的全盘扫描非常消耗 CPU。既然 Strm 文件不会自动变回去,我们只需要手动执行一次即可。

请将命令中的 IP 替换为你自己的公网 IP

# 1. 进入 Xiaoya 容器
docker exec -it xiaoya bash

# 2. 执行批量替换 (请修改下面的 IP)
# 这一步根据文件数量可能耗时几分钟,请耐心等待
find /etc/nginx/html -name "*.strm" -type f -exec sed -i "s|http://xiaoya.host:5678|http://你的公网IP:5678|g" {} \;

# 3. 退出容器
exit

第二步:部署“资源安全型”Nginx 守护脚本

Xiaoya 重启后 Nginx 配置会恢复默认,导致认证失效。我们需要一个脚本来自动维护它。

✨ 脚本亮点

  • 轻量级:只检查内存配置,毫秒级响应,几乎不占 CPU。
  • 防死锁:引入 flock 锁机制,防止脚本重复并发运行(这是导致很多服务器卡死的主因)。
  • 智能修复:只有检测到配置丢失时才执行重载。

在服务器宿主机创建 /etc/xiaoya/auto_fix_nginx.sh

#!/bin/bash
# 专为网易爆米花优化的 Nginx 守护脚本 (安全版)

# 🔒 核心锁机制:防止脚本并发堆积导致 CPU 100%
LOCK_FILE="/tmp/xiaoya_nginx_fix.lock"
exec 200>$LOCK_FILE
flock -n 200 || exit 1

# =========== 配置区域 ===========
# 请将你的 dav 密码 (默认用户 dav) 进行 Base64 编码
# 命令行获取方式: echo -n "dav:你的密码" | base64
# 示例: dav:123456 -> ZGF2OjEyMzQ1Ng==
MY_AUTH="Basic 你的Base64字符串"
# ===============================

# 仅在检测到 Nginx 配置丢失(重启后)才进行修复
if ! docker exec xiaoya grep -q "${MY_AUTH}" /etc/nginx/http.d/default.conf; then
    echo "$(date) - [警告] Nginx 配置丢失,正在注入认证自动修复..." >> /var/log/xiaoya_fix.log
    
    # 1. 移除旧的认证头(如有)
    docker exec xiaoya sed -i "/proxy_set_header Authorization/d" /etc/nginx/http.d/default.conf
    
    # 2. 注入新的认证头 (暴力解决爆米花认证失败)
    docker exec xiaoya sed -i "/location \/dav {/a \                proxy_set_header Authorization \"${MY_AUTH}\";" /etc/nginx/http.d/default.conf
    
    # 3. 移除 User-Agent 限制 (防止拦截非浏览器客户端)
    docker exec xiaoya sed -i "s/deny all;/allow all;/g" /etc/nginx/http.d/default.conf
    
    # 重载配置
    docker exec xiaoya nginx -s reload
    echo "$(date) - [成功] 修复完成,服务已恢复。" >> /var/log/xiaoya_fix.log
fi

赋予可执行权限:

chmod +x /etc/xiaoya/auto_fix_nginx.sh

第三步:设置 Cron 定时守护

将脚本加入定时任务,建议每 2 分钟检查一次。由于我们加了文件锁,即使频率再高也不会卡死服务器。

crontab -e

# 添加以下内容:
*/2 * * * * /bin/bash /etc/xiaoya/auto_fix_nginx.sh

第四步:开启 115 秒传 (彻底解决卡顿)

做了以上步骤,你能“播”了,但可能还会“卡”。这是因为阿里云盘 WebDAV 通道限速。如果你有 115 会员,请务必开启自动转存。

确保 /etc/xiaoya/ali2115.txt 文件存在且内容如下:

purge_ali_temp=true
purge_pan115_temp=true
dir_id=0

原理:播放时,Xiaoya 会自动将阿里云盘资源转存到你的 115 网盘(利用 115 的秒传特性),然后重定向到 115 的高速 CDN 直链进行播放。这才是流畅 4K 的秘密。

享用时刻

现在,配置你的播放器(网易爆米花 / VidHub / Infuse):

  • 协议:WebDAV
  • 主机你的公网IP
  • 端口5678
  • 路径/dav/strm (注意不是 /dav)
  • 用户/密码:随意填写 (因为服务器会自动帮我们修正为正确密码)

Enjoy! 🍿

 

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。