Вопрос или проблема
Возможно ли изменить настройки по умолчанию apache2, чтобы использовать другую временную папку вместо /tmp? Скажем, /filestore/temp.
Долгая история: у меня есть ограничения по размеру на диске /tmp, и я хотел бы установить определенное место для загрузок apache. Мое приложение написано на php, но для одной конкретной функции (используя webdav и чанки) apache использует tmp перед тем, как переместить файлы в конечное место, заданное в конфигурации php. Когда я загружаю файлы через webdav, apache, кажется, использует папку modproxy+random_name внутри tmp. При больших размерах файлов tmp заполняется и загрузка неудачна.
Конечно, я пытался установить значения в php.ini, но, похоже, что он “кэширует” загрузку в /tmp перед передачей ее в php.
upload_tmp_dir="/filestore/temp"
sys_temp_dir = "/filestore/temp"
Я пытался установить TMPDIR на уровне envvars вот так (нашел это где-то в интернете, но без успеха)
export TMPDIR=/filestore/temp
Я хотел бы установить это на уровне envvars или, что еще лучше, на уровне vhost. Но я не уверен, возможно ли это в принципе. Я использую debian 11 и пакет apache2 из apt. Юнит определен с параметром PrivateTmp=true. Не уверен, но это также может быть связано с mod_proxy или mod_proxy_fcgi.
Также пытался отключить PrivateTmp, но просто переместил такое же поведение из /tmp/xxxx-apache2service-xxxxx в /tmp напрямую.
Ответ или решение
Изменение каталога временных файлов Apache2: Полное руководство
В условиях ограниченного пространства на диске, особенно в каталоге /tmp, задача изменения директории временных файлов Apache2 становится актуальной. Многие администраторы и разработчики сталкиваются с проблемами, связанными с переполнением этого каталога во время загрузок, особенно если они используют такие функции, как WebDAV, обработка больших файлов и модули проксирования. В данной статье мы рассмотрим, как перенастроить Apache2 для использования альтернативного временного каталога, например, /filestore/temp, чтобы избежать таких проблем.
Шаг 1: Настройка PHP
Первым шагом, который стоит предпринять, является настройка параметров php.ini. Убедитесь, что значения, указанные ниже, правильно настроены для вашего PHP:
upload_tmp_dir="/filestore/temp"
sys_temp_dir="/filestore/temp"
Эти директивы указывают PHP использовать указанный каталог для временного хранения загружаемых файлов. Однако, как вы уже заметили, Apache может все равно использовать /tmp для временного кеширования, особенно в случае работы с большими файлами.
Шаг 2: Установка TMPDIR для Apache
Одним из методов, который может помочь, является установка переменной окружения TMPDIR. Для этого вы можете использовать файл /etc/apache2/envvars
. Добавьте следующую строку:
export TMPDIR=/filestore/temp
Однако учтите, что в зависимости от конфигурации вашего Apache и его модулей, это может не сработать. В таких случаях необходимо рассмотреть другие настройки.
Шаг 3: Изменение конфигурации Apache
Вы также можете изменить настройки непосредственно в конфигурации Apache. Если вы хотите задать временный каталог на уровне виртуального хоста, это можно сделать, добавив директиву ProxyPass
в файл конфигурации вашего виртуального хоста:
<VirtualHost *:80>
...
ProxyPass /upload !
ProxyPass /upload/ fcgi://127.0.0.1:9000/filestore/temp/
...
</VirtualHost>
Эта настройка перенаправляет запросы загрузки на указанный каталог. Обратите внимание, что вам может понадобиться проверить настройки вашего WebDAV и, если требуется, перенастроить их для работы с новым временным каталогом.
Шаг 4: Управление PrivateTmp
Если ваш Apache настроен с параметром PrivateTmp=true
, это будет означать, что процессы, запускаемые Apache, будут изолированы от системного временного каталога /tmp
. Это может вызвать проблемы с доступом к загружаемым файлам. Чтобы проверить или изменить эту настройку, вам нужно будет редактировать файлы юнитов Systemd вашего Apache.
Чтобы изменить PrivateTmp
, откройте соответствующий файл:
sudo nano /etc/systemd/system/apache2.service.d/private.conf
И добавьте или измените строку:
[Service]
PrivateTmp=false
Если у вас нет такой директории, создайте её, а затем обновите конфигурацию:
sudo mkdir -p /etc/systemd/system/apache2.service.d/
sudo nano /etc/systemd/system/apache2.service.d/private.conf
После изменения перезапустите систему:
sudo systemctl daemon-reload
sudo systemctl restart apache2
Шаг 5: Тестирование
После выполнения всех настроек убедитесь, что вы протестировали систему. Попробуйте выполнить загрузку файла через WebDAV и убедитесь, что временные файлы сохраняются в указанной директории. Вы можете использовать команду df -h
, чтобы убедиться, что в целевом каталоге достаточно пространства.
Заключение
Изменение временной директории Apache2 не всегда является простым процессом, но, следуя указанным выше шагам, вы сможете успешно настроить Aapche для работы с временными файлами в указанном вами каталоге. Это обеспечит стабильную работу вашего приложения, снизив вероятность возникновения ошибок из-за переполненного дискового пространства. Не забывайте также периодически проверять настройки и обновлять их по мере необходимости, чтобы избежать будущих проблем с хранилищем.