PHP 上传文件无法超过 1MB
由 瞳人
发布于 Aug. 31, 2015, 4:47 p.m.
0 个评论
nginx 反向代理后, apache 和 php 环境中上传文件无法超过 1MB.
问题描述
服务器上 docker 环境中运行了 moodle 课程网站 (关于如果在 docker 中运行 moodle 可以看我之前的文章), 但是在使用过程中发现在上传 2MB 大小的文件时, 显示如下图错误:
但是在上传小于 1MB 的文件时, 能够上传成功. 说明应该不是目录权限问题.
思考一: lamp 中 php 配置问题?
但是在运行 moodle 的容器中, php 的配置文件中已经修改了大小限制:
1 2 3 4 | sed -i 's/post_max_size = 8M/post_max_size = 32M/g' /etc/php5/apache2/php.ini sed -i 's/post_max_size = 8M/post_max_size = 32M/g' /etc/php5/cli/php.ini sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 32M/g' /etc/php5/apache2/php.ini sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 32M/g' /etc/php5/cli/php.ini |
所以应该不是这个问题导致的.
尝试二: moodle 自己的 bug?
于是尝试更新 moodle, 更新过程也可以参考我之前的文章. 但是更新过后, 还是没有解决问题.
尝试三: nginx 反向代理的限制?
由于上传文件限制在小于 1MB, 而 nginx 服务器有一个参数 client_max_body_size
默认值是 Default: client_max_body_size 1m;
Sets the maximum allowed size of the client request body, specified in the “Content-Length” request header field. If the size in a request exceeds the configured value, the 413 (Request Entity Too Large) error is returned to the client. Please be aware that browsers cannot correctly display this error. Setting size to 0 disables checking of client request body size.
由于我在服务器上有多个 web 服务, 基本上每个服务有不同的域名并且对应不同的 container, 所以我使用了 nginx-proxy 的一个 container 来作为反向代理.
而且我在 nginx-proxy 中的 Dockerfile 中加入了如下代码:
1 | RUN echo 'client_max_body_size 1G;' > /etc/nginx/conf.d/my_proxy.conf |
理论上来说应该会生效, 但是不知道为什么没有生效. 我在 container 里面手动加入了这个参数并且重启 container 之后, 问题解决了.
0 Comments