Поддомен подстановочных знаков Nginx Автоматическое создание файла журнала доступа

У меня почти 200 субдоменов на NGINX и есть директива

access_log  /var/log/nginx/$host-access.log;

Проблема в том, что ни один из файлов журнала доступа к субдоменам на самом деле не существует , поэтому журнал ошибок загружается с такими ошибками, как

(13: Permission denied) while logging request...

Это установка Wordpress Multisite, поэтому субдомены создаются внутри базы данных WP. NGINX ничего не знает, пока не поступит запрос.

Как с этим поступить? Я подумал о написании сценария PHP, который анализирует URI и проверяет наличие файла журнала, записывая его, если он не существует. Мне все равно, если не будет зарегистрирован самый первый запрос. Или есть способ, чтобы NGINX изначально создавал файл журнала, если он не существует? Я знаю, что из-за неверных запросов будет создано несколько файлов журнала мусора. Сценарий PHP позволит этого избежать. Любой совет приветствуется!

0
задан 15 November 2019 в 17:08
1 ответ

Используя $host в имени файла не хороший подход. Это означает, что Ваш веб-сервер может подвергнуться нападению путем отправления запросов с миллионами различных Host: контент заголовка. Это могло бы вести в исчерпание inodes в Вашей файловой системе.

Для предотвращения этого необходимо перечислить все субдомены в директиве nginx server_name и затем использовать $server_name в качестве переменной на имя файла журнала. Для значения по умолчанию vhost, можно или использовать один файл журнала или никакой файл журнала вообще.

Однако для решения текущей проблемы разрешения необходимо удостовериться, что у пользователя, работающего nginx, есть полномочия записи к каталогу журнала nginx.

, Например, необходимо применить следующее:

  • каталог Файла журнала по телефону /var/log/nginx
  • , который владелец каталога Log www-data
  • выполнения nginx как www-data пользователь
  • , полномочия каталога Log 0755
0
ответ дан 4 December 2019 в 23:48

Теги

Похожие вопросы