商洛几家企业的后台传图总失败,前端都提示"文件过大",改来改去还是不行。这种问题看着是程序的事,其实八成是服务器上那道墙没开,程序本身没毛病。
三道常被挡住的口子
第一道是上传大小限制。这道墙可能在三个地方,很多人只改了一个,改完还是失败。
- Web 服务端的配置,单个请求能带多大
第二道是附件类型白名单。只放行 jpg 和 png,结果有人传 heic、传 pdf 就过不去。
- 第三道是临时目录的权限和磁盘空间
第三道最常被忘。临时目录写不进去或者磁盘满了,上传在中间断掉,前端显示的是超时不是失败。
这三道里我们查得最多的是第一道,而且是"改了一个地方忘了另一个"。改完 Nginx 的,忘改程序里的限制;改了程序的,忘改反向代理那一层。上传这条链是串起来的,断一节就是失败。
在有限权限下怎么自查
多数客户给的服务器权限有限,不能随便改配置,这时候有个省事的办法:用一个已知大小的标准文件试。
先传一张两百K的图,能过;再传三兆的,不过;就知道卡在哪个量级。这个量级往前推一格,就是该放开的值。
商州一家做建材的,试出来卡在两兆,问了机房才知道是反代那一层限制的,程序里明明写的是十兆。量级试出来再去找配置,比翻十份文档快。
临时目录那件事
柞水一家做溶洞讲解的上传老超时,查了半天是磁盘满了。前面一个客户传了一堆高清宣传图,占满了空间,上传写到一半没地方写,就断了。
这类问题前端提示基本都是"请求超时",很容易往网络问题上想。我们一查磁盘使用率百分之百,清掉旧图就通了。
后来我们给他们的后台加了一个空间告警,用到八十就提醒,不用等传图失败才发现。
类型白名单别卡太死
这条是我们吃过亏之后的写法。原来只放 jpg、png,客户要传一份 pdf 的检验报告,传不上去,到头来绕道用邮箱发了。
现在我们的写法是:图片宽放、文档宽放、可执行文件一律不放。宁可多放行几个无害的类型,也别让人为了传个文件走后门。白名单卡太死的结果,是客户自己发明绕过去的土办法。
商洛这边的机器环境
这边多数是小机房托管,十兆带宽起步,上传大文件很容易超时。我们的建议是别让用户一次传五兆以上,前端拆成小块传,断了能续。
这条增加了工作量,但商洛这边网络抖动比城里常见,不拆的话一次断一次投诉。
常被追问的三点
传图失败该先找谁?
先自己量级试一下,卡在哪个数清楚了,再找机房,一句话就说得清。
能让我自己改配置吗?
能,但改之前先确认三道墙的值,别改了一处就以为完事。
图片很大怎么传得快?
前端分片加断点续传,商洛这边网络抖,这一条比提速更实用。
我们这么干不是脾气是习惯,只有常斌的团队会不嫌麻烦:上传失败先量级试一下,比翻十份文档快。
收个尾,回到开头
上传失败多数不是程序 bug,是配置没对齐。信服无限商洛代码全部交付,1 年维护不另算钱,运维这块按双周迭代排。你传一张图试试,把报错那行字原样发我,我告诉你是哪道墙。