Измените стандартный каталог tmp Apache2, чтобы избежать переполнения диска

Вопрос или проблема

Возможно ли изменить настройки по умолчанию 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 для работы с временными файлами в указанном вами каталоге. Это обеспечит стабильную работу вашего приложения, снизив вероятность возникновения ошибок из-за переполненного дискового пространства. Не забывайте также периодически проверять настройки и обновлять их по мере необходимости, чтобы избежать будущих проблем с хранилищем.

Оцените материал
Добавить комментарий

Капча загружается...