一、那些年踩过的坑
直连服务器:用户一拥而上,带宽直接打满,Nginx返回502,老板在群里疯狂@我。
无压缩原图:一张8M的手机照片,传到媒体库再被主题裁剪成20个尺寸,磁盘瞬间报警。
权限裸奔:某个“热心用户”上传了伪装成jpg的php,秒变矿机。
CDN回源混乱:开了Cloudflare却没改WordPress地址,HTTPS混合内容导致整站绿锁变灰。
二、插件选型四指标
云端直传:绕过服务器,浏览器直传S3/OSS,带宽零消耗。
实时压缩:上传瞬间WebP化,视觉无损体积降70%。
动态鉴权:预签名URL+Nonce,杜绝伪造上传。
回源重写:自动替换URL前缀,一键HTTPS+CDN。
三、我们最终锁定的组合
插件:WP Offload Media Lite(免费版已够用,付费版支持多CDN)
云存储:Backblaze B2(API兼容S3,价格感人)
压缩:TinyPNG API(每月500张免费,超出后0.009美元/张)
安全:Wordfence防火墙+WP Cerber上传扫描
四、上线48小时的数据
五、避坑锦囊
先在staging复现全量数据,跑一遍wp media regenerate。
S3桶记得关“列出对象”,防止恶意遍历。
Nginx加一条client_max_body_size 50M;,否则大文件直接413。
把wp-config.php里的AS3CF_SETTINGS写成常量,避免被插件更新覆盖。
【教程】手把手部署“WordPress用户上传图片插件”全流程
(以WP Offload Media Lite + Backblaze B2为例,其他云照葫芦画瓢)
步骤1:准备云存储
注册Backblaze,创建Bucket,类型选“Private”。
记录Endpoint(如s3.us-west-001.backblazeb2.com)、Key ID、Application Key。
步骤2:安装插件
WordPress后台→插件→安装→搜索“WP Offload Media Lite”→启用。
设置→Offload Media→Provider选“S3 Compatible”。
填Access Key、Secret Key、Bucket、Endpoint。
点击“Test S3 Settings”绿灯即连通。
步骤3:开启云端直传
在同一设置页打开“Enable Uploads”开关。
设置最大文件尺寸(建议50M以下,留余量)。
勾选“Remove Files From Server”,本地只保留缩略图占位符。
步骤4:压缩与WebP
注册TinyPNG账号,复制API Key。
插件市场搜索“TinyPNG for WordPress”,启用后填入Key。
在“Compression”选项里勾选“Automatically compress on upload”和“Convert to WebP”。
步骤5:CDN与HTTPS
Cloudflare添加站点→DNS解析到源站IP→SSL/TLS选“Full (strict)”。
Cloudflare→Rules→Page Rules:
URL匹配*.jpg、*.png、*.webp,Cache Level设“Cache Everything”,Edge Cache TTL设“1 month”。
回到Offload Media设置→Custom Domain填写CDN域名(如cdn.example.com)。
步骤6:验证与回滚
上传一张5M测试图,浏览器Network里应看到直传B2的PUT请求返回200。
文章页源码里图片URL应为https://cdn.example.com/2025/09/xxx.webp。
若出现问题,在插件设置点击“Download Files From S3”即可回滚本地。
步骤7:自动化监控
用Upptime自建监控,检测/wp-content/uploads是否返回403(防止误公开)。
Cloudflare Worker写5行脚本,定时检查B2桶CORS配置是否被篡改。
至此,一套高可用、低成本、可扩展的WordPress图片上传体系就交付了。祝各位再也没有凌晨三点的告警短信。