如何修改Apache2默认临时目录以避免磁盘占满?
如何修改Apache2默认临时目录以避免磁盘占满?
太懂你这种/tmp盘空间不够的糟心了!尤其是用WebDAV传大文件时,Apache偷偷在/tmp里生成modproxy开头的临时文件夹,直接把小容量的/tmp塞满导致上传失败,改了PHP的upload_tmp_dir还不管用——毕竟这是Apache层面的缓存,不是PHP的锅。
我给你整理几个靠谱的解决办法,从全局到站点级都有,你按需选:
一、针对mod_proxy的专属解决(最精准)
你提到Apache生成了modproxy+random_name的临时文件夹,这说明是mod_proxy模块在缓存上传内容,这时候改TMPDIR可能没用,得用mod_proxy专属的配置指令:
- 打开Apache的全局配置文件(比如
/etc/apache2/apache2.conf)或者对应站点的vhost配置文件 - 加入下面的配置,指定mod_proxy的临时目录:
# 可以全局配置,也可以放到对应的<VirtualHost>块里针对单个站点 ProxyTempDir /filestore/temp - 保存后重载Apache配置:
sudo systemctl reload apache2,或者重启服务确保生效。
二、全局修改Apache的临时目录(适用于所有站点)
如果想让整个Apache服务都用新的临时目录,修改envvars文件是最稳妥的:
- 找到Apache的envvars文件,通常路径是
/etc/apache2/envvars(不同系统可能略有差异,比如CentOS可能在/etc/sysconfig/httpd) - 在文件末尾添加:
export TMPDIR=/filestore/temp - 关键!必须给新目录配置正确的权限,让Apache的运行用户(通常是
www-data,部分系统是apache)能读写:sudo chown www-data:www-data /filestore/temp sudo chmod 750 /filestore/temp - 重启Apache服务:
sudo systemctl restart apache2之前你改了envvars没生效,大概率是没重启服务,或者权限没配置对导致Apache没法访问新目录。
三、站点级(vhost)单独配置(针对单个站点)
如果只想给某个特定站点换临时目录,不想影响其他站点,可以在对应的vhost配置里加环境变量:
<VirtualHost *:80> ServerName yourdomain.com # 给当前站点指定临时目录 SetEnv TMPDIR /filestore/temp # 其他站点配置... </VirtualHost>
保存后重载Apache配置即可,同样要确保新目录的权限没问题。
验证是否生效的小技巧
- 写个简单的PHP脚本放到站点目录里,访问它看看TMPDIR是不是已经改成新目录了:
<?php echo "当前TMPDIR:" . getenv('TMPDIR'); ?> - 或者传个大文件,之后去
/filestore/temp里看看有没有生成临时文件,同时检查/tmp里有没有新增的modproxy相关文件夹,就知道是不是生效了。
备注:内容来源于stack exchange,提问作者Gonzalo Cao Cabeza de Vaca
相关产品推荐
相关产品推荐

