EasyImage 图片信息页 / 缩略图 403 Forbidden
- 日期:2026-08-29
- 项目:easyimage(部署目录:codex-docker/easyimage)
- 涉及组件:ddsderek/easyimage 容器 + Nginx Proxy Manager 2.15.1(反向代理 img.inanaqi.top)
- 状态:已定位根因,待执行修复(需在 NPM 后台操作)
现象
访问以下地址返回 403 Forbidden:
https://img.inanaqi.top/app/info.php?img=/i/2026/08/29/lstsoy.jpg同时图库列表页 /app/list.php 中的缩略图请求 /app/thumb.php?img=/i/... 也全部 403(浏览器里表现为缩略图加载失败)。
排查过程
- 容器直连(
http://127.0.0.1:8088/app/info.php?img=/i/...)返回 200,确认 EasyImage 本身正常。 - 公网请求响应头为
Server: openresty,确认 403 来自 NPM 反向代理层,而非应用。 对比测试:
查询串 结果 img=/i/2026/08/29/lstsoy.jpg403 img=i/2026/08/29/lstsoy.jpg(去前导斜杠)200 img=/a/b403 img=/ab/cd.jpg200 结论:首段为单字母的路径(如
/i/...)会被拦截。- 定位到 NPM 内置规则:该 proxy host 开启了 Block Common Exploits,其"文件注入"检查如下(
/etc/nginx/conf.d/include/block-exploits.conf):
if ($query_string ~ "[a-zA-Z0-9_]=/([a-z0-9_.]//?)+") {
set $block_file_injections 1;
}
if ($block_file_injections = 1) {
return 403;
}该规则会拦截 参数=/单字母路径/... 形式的查询串,EasyImage 上传目录路径 /i/YYYY/MM/DD/... 首段恰好是单字母 i,触发误拦。请求在 NPM 层直接 403,未到达 EasyImage。
修复方案
方案 A(推荐,最干净):NPM 后台(http://<服务器IP>:81)→ Hosts → Proxy Hosts → 编辑 img.inanaqi.top → Advanced 标签页 → 取消勾选 Block Common Exploits → 保存。NPM 会立即重新生成配置,无需重启容器。
方案 B(保留其余防护):在同一个 Advanced 页面的 Custom Nginx Configuration 中添加一行,只关闭"文件注入"检查(SQL 注入、垃圾评论、恶意 UA 等拦截仍生效):
set $block_file_injections 0;原理:NPM 的自定义配置会加载在拦截规则之后,把变量归零后 return 403 不再触发。
验证方法
修复后执行,应返回 200:
curl -sS -o /dev/null -w '%{http_code}\n' 'https://img.inanaqi.top/app/info.php?img=/i/2026/08/29/lstsoy.jpg'同时检查图库页缩略图是否恢复:https://img.inanaqi.top/app/list.php