Apache CustomLog для регистрации полного URL

16

Я хотел бы добавить CustomLogдирективу в мою конфигурацию apache для регистрации полного запрошенного URL (или, по крайней мере, части хоста URL). У меня есть несколько доменов, обрабатываемых одним и тем же экземпляром apache, и я хотел бы иметь возможность различать домены в журналах (как сейчас все, что я вижу, это «GET /»). В документации по LogFormat я вижу списки %Uдля печати части пути URL, но я ищу хост.

jrdioko
источник

Ответы:

20

Продолжайте читать LogFormatдокументацию, и вы найдете:

%...{Foobar}i:  The contents of Foobar: header line(s) in the request
                sent to the server.

Что означает, что вы можете включить в свою конфигурацию:

%{Host}i

В %vи %Vдирективы могут также получить , что вы хотите.

% v всегда будет значением ServerName(«каноническое имя» вашего виртуального хоста). %V может быть значением ServerNameили значением Hostзаголовка HTTP , в зависимости от того, UseCanonicalNameвключен ли в вашей конфигурации или нет (и предоставил ли клиент Hostзаголовок).

larsks
источник
Будет ли %{Host}iработать даже для HTTP / 1.0? %Vвыглядит прямо на первый взгляд, спасибо!
Джридиоко
Я считаю, что% {Host} i (или любая конструкция% {...} i) будет давать результат, только если этот заголовок действительно существует в запросе. Поэтому для HTTP / 1.0 я бы не ожидал, что это будет полезно.
Жаворонки
Еще одно уточнение: так %Vбудет ли идентично, %{Host}iесли UseCanonicalNameотключено?
Джридиоко
1
Согласно документации, «при отключенном UseCanonicalName Apache будет формировать самоссылочные URL-адреса, используя имя хоста и порт, предоставленные клиентом, если они будут предоставлены (в противном случае он будет использовать каноническое имя, как определено выше)». Так что %Vбудем использовать, ServerNameесли нет Hostзаголовка.
Жаворонки
2

"% v" - это ServerName, возможно, то, что вы хотите?

AGY
источник
Похоже, что %vвсегда возвращает одну и ту же строку в моей ситуации: значение ServerName независимо от того, какой домен отображается в URL. Но %Vпохоже, что это правильно.
Джридиоко
Это связано с именем виртуального хоста
Роберт
2

Добавьте %vв ваш формат журнала.

Что-то вроде этого:

LogFormat "%v - %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined-vhost
CustomLog /log/file/location combined-vhost
Шейн Мэдден
источник
1
Похоже, что %vвсегда возвращает одну и ту же строку в моей ситуации: значение ServerName независимо от того, какой домен отображается в URL. Но %Vпохоже, что это правильно.
Джридиоко
2

LogFormat "% h% l% u% t \"% r \ "%> s% b \"% {Referer} i \ "\"% {User-Agent} i \ "% {Host} i% U% q "в сочетании

%{Host}i%U%qдает полный URL.

borayeris
источник