今天测试人员在上传较大的文件时出现413错误,如下图所示:
也许你会说,已经有那么多写这类的文章了,你再在这里写岂不是多余,我也看了类似的文章,我在这里写出我的经历就是因为我的经历跟别人不太一样,所以才在此板书,下面入主题:
知道这个问题的小伙伴多半知道如何解决“常见的413”错误--在nginx的nginx.conf配置文件http部分增加下面配置client_max_body_size 1m(此处大小设置你想限制上传的文件大小,默认是1M,1.11版本及其以前版本多半是这个数值,不排除后期版本会不会修改);
我的经历不同之处在于:上面的设置对我来说没有一点效果!!我在本地测试时可以上传1M及其以上大小的文件,但是我在nginx.conf里面设置最大可上传大小为1M了啊,为什么没有效果呢,我研究了测试服务器上nginx的log日志,并对比了我自身电脑上nginx日志,发现了端倪:测试服务器在调用上传文件接口时会打印这条记录,但我自身电脑上却没有打印任何日志,于是我大胆的假设我在本自测上传文件时没有经过nginx,为什么会造成这种效果呢?
产生问题的根源就要分析nginx的反向代理功能了:
server {
listen 80;
server_name xx.xx.com;
proxy_set_header X-Real-IP $remote_addr;
location ~ /services {
proxy_pass http://127.0.0.1:21888;
}
location ~ /{
proxy_pass http://127.0.0.1:8897;
}
}
server_name填写的是域名,但是我在使用jquery.file.upload插件上传文件时使用的是ip,这样就会导致调用接口时没有经过nginx,所以nginx的设置也就没有任何效果了。
解决方案:把上传文件处写的ip改成域名,并在本地的hosts文件中将该域名映射为127.0.0.1,然后再在nginx.conf文件里面添加上面的反向代理部分即可。