Azure App Service中PHP应用无法上传2MB以上文件求助
解决Azure App Service PHP 8.2应用上传文件超2MB报413错误的方案
问题核心原因
Azure App Service for Linux的/etc目录属于临时存储,重启后会重置默认配置;同时自定义PHP配置文件的放置位置不符合平台加载规则,导致之前的修改无法持久生效。
具体解决步骤
1. 持久化配置Nginx上传大小限制
创建startup.sh脚本并放到应用根目录,内容如下:
#!/bin/bash # 将nginx上传配置写入持久化目录 echo "client_max_body_size 5M;" > /home/site/nginx/upload.conf # 建立软链接到nginx配置目录,确保重启后配置不丢失 ln -sf /home/site/nginx/upload.conf /etc/nginx/conf.d/upload.conf # 重启服务使配置生效 service nginx reload service php8.2-fpm restart
然后在Azure门户的应用服务→配置→常规设置中,将启动命令设置为:./startup.sh
2. 配置PHP上传参数(两种方式选其一)
方式一:用自定义php.ini文件
- 在应用的
/home/site目录下创建ini文件夹 - 将你的自定义
php.ini上传到/home/site/ini目录,内容保持不变:
upload_max_filesize = 5M post_max_size = 5M max_execution_time = 300 max_input_time = 300 memory_limit = 128M
- 在应用服务→配置→应用设置中添加一条配置:
PHP_INI_SCAN_DIR=/usr/local/etc/php/conf.d:/home/site/ini
方式二:直接通过应用设置配置(更简便)
在应用服务→配置→应用设置中添加以下键值对:
PHP_UPLOAD_MAX_FILESIZE=5MPHP_POST_MAX_SIZE=5MPHP_MAX_EXECUTION_TIME=300PHP_MAX_INPUT_TIME=300PHP_MEMORY_LIMIT=128M
3. 检查前端代理/CDN限制
如果应用前端搭配了Azure Front Door、CDN或其他反向代理,需要同步调整这些服务的最大请求体大小,避免前端提前拦截大文件上传请求。
验证配置有效性
- 重启应用服务使所有配置生效
- 上传3-5MB的测试文件验证是否成功
- 通过SSH连接应用后,可执行
nginx -T | grep client_max_body_size确认Nginx配置;执行php -i | grep upload_max_filesize确认PHP配置是否生效
内容的提问来源于stack exchange,提问作者Tushar Sondhi
相关产品推荐
相关产品推荐

