У нас есть сайт Drupal, работающий под управлением Pantheon. Мы хотели бы вести журнал, аналогичный Apache access.log, показывающий REQUEST_URI каждой страницы, на которую было обращено внимание, вместе с исходным IP-адресом. Это сделано для того, чтобы, если мы наблюдаем, как кто-то злоупотребляет сайтом, мы могли просмотреть журнал и получить IP-адрес нарушителя. Я думаю, что почти каждый клиент Pantheon хотел бы эту возможность, поэтому я удивлен, что это кажется таким сложным. Надеюсь, я просто упускаю что-то очевидное. Я исследовал два возможных пути:
(1) Используйте файл nginx-access.log. Здесь есть вся необходимая мне информация, за исключением того, что сохраненный IP-адрес является внутренним IP-адресом Pantheon, например 10.223.177.45, а не исходным IP-адресом. Я спросил поддержку Pantheon о сохранении исходного IP-адреса в nginx-access.log и получил такой ответ:
Вы просите нас изменить способ хранения лог-файлов, этого не произойдет. Настройки универсальны для всей нашей платформы. Как я уже говорил, 10.223.177.45 — это внутренний IP-адрес от Pantheon.
Не существует способа сделать это.
Мне трудно поверить, что «это невозможно сделать», поскольку исходный IP-адрес доступен через PHP как $_SERVER["REMOTE_ADDR"]
. Понятно, что информация у них есть, но почему-то не хотят хранить ее в nginx-access.log.
(2) Создайте собственный файл журнала из PHP, сохраняя $_SERVER["REMOTE_ADDR"]
и $_SERVER["REQUEST_URI"]
. У нас уже есть куча пользовательского кода в sites/default/settings.php, и мы могли бы добавить что-то, что использует file_put_contents
для добавления строки в файл журнала. Может быть, что-то вроде этого:
<?php file_put_contents('sites/default/files/private/access.log', $_SERVER['REMOTE_ADDR'] . ' ' . date('Y-m-d H:i:s') . ' ' . $_SERVER['REQUEST_METHOD'] . ' ' . $_SERVER['REQUEST_URI'] . "\n", FILE_APPEND); ?>
Но тогда нам пришлось бы менять этот файл журнала, когда он заполнялся. Я думаю, мы можем это сделать ... это просто забота о техническом обслуживании.
Сталкивался ли какой-либо другой клиент Pantheon с этой проблемой раньше и нашел ли более простое решение?