第一阶段:准备挂载点与权限
# 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 "挂载点读写测试成功!"
评论 0
欢迎参与讨论,请保持友善与尊重。