Apache LogFormat: весь час записуйте повне доменне ім’я


1

У нас є один сервер, який розміщує багато різних доменів. Оскільки цей сервер припиняється, ми хочемо знати, чи є домени, що вказують на цей сервер. Я хотів би, щоб журнали Apache повідомили про ці доменні імена.

У наших журналах Apache відображаються такі дані:

163.172.66.133 - - [16 / груд. 2016: 11: 37: 40 +0100] "GET / en / page / test HTTP / 1.1" 301 - "-" "Mozilla / 5.0 (сумісний; AhrefsBot / 5.1; + http : //ahrefs.com/robot/ ) "

Він повинен бути з повним доменним іменем сторінки, на яку запитується.

163.172.66.133 - - [16 / груд. 2016: 11: 37: 40 +0100] "GET https: // www.domainname.com / en / page / test HTTP / 1.1" 301 - "-" "Mozilla / 5.0 (сумісно; AhrefsBot / 5.1; + http://ahrefs.com/robot/ ) "

Я використовую такий LogFormat:

LogFormat "%h %l %u %t \"%m http://%v:%p%U\" %>s %b" common

Іноді я бачу повне доменне ім’я, більшість часу - ні.

Як я можу постійно показувати доменні імена?


1
Використовуючи правильний формат журналу . Швидше за все, ви хочете включити %vабо %V.
Сет

Що станеться, якщо ім'я сервера чи псевдонім не визначає всі доменні імена?
SPRBRN

1
Як би це сталося? Якщо ви подивитесь на документацію, вам потрібно визначити домен або IP, щоб сервер міг відповісти. Таким чином, ви могли б знати, на який сервер відповіли та на інші запити не слід відповідати. Місце у вашому запитанні містить лише частину заголовка GET-запиту, яка може просто не включати домен. Один із варіантів завжди бути таким, щоб мати лише абсолютні посилання на своєму сайті (небажано).
Сет

1
Я щойно помітив, що у вас уже є %vваш LogFormat, ви впевнені, що це ваше єдине визначення у всіх конфігураціях хоста? Погляньте на це питання: Використання% v у визначенні Apache LogFormat відповідає ServerName замість конкретного запиту vhost, це може запропонувати ви можете також використовувати, %{Host}що може дати вам інформацію, яку ви шукаєте?
Сет

1
Тож ваш сервер просто сервери випадкових доменів? Зрештою, у вас повинна бути якась конфігурація, яка дозволяє цим запитам звертатися до неї, правда? Що %{Host}генерує?
Сет

Відповіді:


2

Якщо ви подивитесь на офіційну документацію щодо формату журналу, ви побачите, що прапор %vабо %Vможе бути те, що вас цікавить, оскільки це дасть вам настроєне Canonical ServerName. Таким чином, серверне ім’я, налаштоване в блоці, нарешті відповів на запит.

Оскільки LogFormatрядок, який ви надали, вже містить цей ідентифікатор, ймовірно, існує більше однієї конфігурації, яка встановлює формат журналу, а рядки журналу, які не містять хост, базуються на тому різному форматі. У вашому форматі завжди має бути лінія, яка відформатована як ваш другий приклад.

Що все ще може бути проблемою, це те, що ви налаштували доменні символи, і ви не зможете побачити, який саме FQDN був запитом. Питання під назвою Використання% v у визначенні Apache LogFormat збігається з ServerName замість конкретного запитуваного vhost , підказує, що ви можете використовувати ідентифікатор, %{Host}щоб отримати "клієнтську перспективу", щоб хост-частина заголовка запиту.

Щоб знайти всі файли конфігурації, що містять LogFormatрядок, ви можете подивитися на інше питання, наприклад, наступне: Як знайти всі файли, що містять певний текст у Linux?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.