第一阶段:准备挂载点与权限

# 1. 创建挂载子目录
mkdir -p /yesok/images/.gu-cloud/{meta,logs,security,tmp}
mkdir -p /yesok/images/{images,files}

# 2. 授权给宝塔的 www 用户
chown -R www:www /yesok/images
chmod -R 755 /yesok/images

第二阶段:防跨站初始化(.user.ini)

⚠️ 注意:请务必替换 pan.wpxx.de 为你届时的实际站点文件夹名称。

# 1. 进入实际站点目录
cd /www/wwwroot/pan.wpxx.de

# 2. 解除防修改锁
chattr -i .user.ini 2>/dev/null

# 3. 写入允许 PHP 访问“站点目录 + 临时目录 + 外挂存储目录”的规则
echo 'open_basedir=/www/wwwroot/pan.wpxx.de/:/tmp/:/yesok/images/' > .user.ini

# 4. 修复文件所有权并重新加锁
chown www:www .user.ini
chmod 644 .user.ini
chattr +i .user.ini

# 5. 打印验证
cat .user.ini

第三阶段:宝塔 Nginx 伪静态配置

在宝塔面板:网站 -> 设置 -> 伪静态 中,填入并保存:

location / {
    if (!-e $request_filename) {
        rewrite ^/(.*)$ /index.php/$1 last;
    }
}

rewrite "^/x/([a-z0-9]{2})/([a-z0-9]{4,22})\.([a-z0-9]{1,12})$" /file.php?key=$1$2&ext=$3 last;
rewrite "^/m/(.+)$" /media.php?path=$1 last;

第四阶段:放行全格式文件上传(代码层)

为了防止网盘程序自带的 config.php 拦截 .iso / .exe 等后缀,需要检查并允许对应 MIME 类型:

# 检查 config.php 中的格式限制配置
grep -E "'iso'|'exe'|'rar'" /www/wwwroot/pan.wpxx.de/config.php

说明:如果程序后台或 config.php 中有 allow_extensions(允许后缀列表)或 mime_types,需确保包含 iso, exe, rar, zip 等所需格式,或直接在网盘后台将文件后缀限制清空。


第五阶段:大文件上传参数修改(PHP 8.2 & Nginx)

# 1. 批量修改 PHP 8.2 的上传与超时参数
sed -i 's/^upload_max_filesize =.*/upload_max_filesize = 20G/' /www/server/php/82/etc/php.ini
sed -i 's/^post_max_size =.*/post_max_size = 21G/' /www/server/php/82/etc/php.ini
sed -i 's/^max_execution_time =.*/max_execution_time = 0/' /www/server/php/82/etc/php.ini
sed -i 's/^max_input_time =.*/max_input_time = 0/' /www/server/php/82/etc/php.ini

# 2. 验证 PHP 修改结果
grep -E "upload_max_filesize|post_max_size|max_execution_time|max_input_time" /www/server/php/82/etc/php.ini

打开宝塔面板 网站 -> 设置 -> 配置文件,在 server { ... } 作用域内加入/修改以下 Nginx 参数:

# 允许 Nginx 接收最大 21G 的 POST 请求体
client_max_body_size 21000M;

# 延长大文件传输的超时时间(防止大文件上传中断)
client_body_timeout 3600s;
fastcgi_read_timeout 3600s;

第六阶段:服务验证与重启

# 1. 检查 Nginx 语法并重载配置
nginx -t && nginx -s reload

# 2. 重启 PHP 8.2 使所有上传限制与路径生效
/etc/init.d/php-fpm-82 restart

第七阶段:防跨站配置智能巡检(运维/重装防错)

在后续维护、程序升级或重新安装后,运行以下自动化脚本,自动判断 .user.ini 是否包含挂载目录并智能补全,无需手动反复对比:

# 1. 切换到真实站点目录
cd /www/wwwroot/pan.wpxx.de

# 2. 智能检测与补全逻辑
if grep -q "/yesok/images/" .user.ini 2>/dev/null; then
    echo "=========================================="
    echo " [✓] .user.ini 正常,已经包含 /yesok/images/"
    echo "=========================================="
    cat .user.ini
else
    echo "=========================================="
    echo " [!] 未包含挂载路径,正在自动更新 .user.ini..."
    echo "=========================================="
    
    # 解锁并重新写入完整路径
    chattr -i .user.ini 2>/dev/null
    echo 'open_basedir=/www/wwwroot/pan.wpxx.de/:/tmp/:/yesok/images/' > .user.ini
    
    # 修复权限与加锁
    chown www:www .user.ini
    chmod 644 .user.ini
    chattr +i .user.ini
    
    echo "更新完成,当前配置如下:"
    cat .user.ini
    
    # 重启 PHP 8.2 生效
    /etc/init.d/php-fpm-82 restart
fi

第八阶段:最终功能连通性验证

# 检查挂载目录是否正常加载且可写入测试文件
touch /yesok/images/test.tmp && rm -f /yesok/images/test.tmp && echo "挂载点读写测试成功!"