Traefik 不管理 PHP 内存限制,真正控制者是 PHP 进程(如 PHP-FPM),需修改 php.ini 中的 memory_limit 并重启 FPM;.user.ini 或 ini_set() 可局部调整但受限;Traefik 仅影响超时和缓冲区配置。
traefik 是反向代理和 API 网关,它不解析 PHP、不执行 PHP 脚本,也不读取 php.ini。你看到的“trae配置php内存限制”其实是混淆了角色——真正控制 PHP 内存的是 PHP 进程自身(比如 PHP-FPM 或内置服务器),而 traefik 只负责把请求转发过去。
如果你用的是 PHP-FPM(最常见场景),内存限制由 php.ini 中的 memory_limit 控制,但要注意:FPM 子进程会继承该值,且无法在 traefik 配置中覆盖。
php.ini:运行 php-fpm -i | grep "Loaded Configuration File" 或 php -i | grep "Loaded Configuration File"
memory_limit = 256M(支持 128M、-1 表示无限制)sudo systemctl restart php8.1-fpm(版本号按实际调整)info.php 文件调用 phpinfo(),查 memory_limit 行某些共享环境不允许改全局 php.ini,可用以下方式局部调整,但受 php_admin_value 和 allow_url_fopen 等限制:
.user.ini(需 PHP >= 5.3,且 user_ini.filename 未被禁用):在项目根目录放文件,内容为 memory_limit = 192M
ini_set('memory_limit', '192M'):只能在脚本开头调用,且前提是 memory_limit 没被 php_admin_value 锁死(FPM pool 配置里用了 php_admin_value[mem
ory_limit] 就无效)ini_set() 对已超限的脚本无效,必须在内存耗尽前设置虽然 traefik 不管 PHP 内存,但它可能因 PHP 响应慢或大而报错,这时要同步检查:
timeout 类参数:如 traefik.http.routers.myapp.middlewares.timeout,避免 PHP 处理久导致 504buffering:大响应体需配 traefik.http.middlewares.buffering.maxRequestBodyBytes 和 maxResponseBodyBytes
context deadline exceeded 或 connection reset
改 PHP 内存限制这件事,核心永远在 PHP 运行时配置,traefik 只是管道。很多人卡在找不到真正的 php.ini 路径,或者改了没重启 FPM,又或者被 pool 级的 php_admin_value 覆盖掉了——这些才是实际踩坑最多的地方。