nginx имеет $scheme
переменная, используемая в ее log_format
линий.
%H
протокол запроса (например, "HTTP / 1.1").
Как я могу сделать то же самое с Apache?
По какой-то причине я не смог заставить приведенные выше примеры работать, поэтому нашел другой способ: вы можете добавить 2 правила перезаписи в свою конфигурацию следующим образом:
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [E=SCHEME:HTTP]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [E=SCHEME:HTTPS]
Затем добавьте это в определение LogFormat.
scheme=\"%{SCHEME}e\"
Один из способов сделать это - использовать два условных CustomLog
директивы, контролируемые HTTPS
переменная установлена.
CustomLog logs/access.log "https://..." env=HTTPS
CustomLog logs/access.log "http://..." env=!HTTPS
Я также пробовал использовать SetEnvIf
следующим образом, но это не работает (регистрирует -
):
SetEnv URL_SCHEME=http
SetEnvIf HTTPS on URL_SCHEME=https
CustomLog logs/access.log "%{URL_SCHEME}e://..."
Поскольку схема URL-адресов не доступна напрямую в формате журнала apache, вы можете зарегистрировать канонический порт (например, 80/443) сервера, обслуживающего запрос, используя% p в качестве альтернативы:
CustomLog access.log "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" port:%p"
У меня это работает с Apache 2.4.23:
LogFormat "%{REQUEST_SCHEME}x ..." my_log_format
%{varname}x
доступен только при загрузке mod_ssl, см.: https://httpd.apache.org/docs/trunk/mod/mod_ssl.html#logformats
Определите вывод журнала и добавьте к нему% H. То же самое и с Apache.
Итак, вы строите LogFormat
вроде этого и afaik есть пара, определенная в конфигурации apache по умолчанию.
LogFormat "%h %l %u %t \"%r\" %>s %b" common
и добавьте имя LogFormat (в данном случае «common») в конец вызова файла журнала.
CustomLog logs/access_log common
Просто посмотрите здесь, чтобы получить дополнительную информацию о журнал и Вот о строках разного формата.