Назад | Перейти на главную страницу

Как зарегистрировать схему URL (http / https) в Apache?

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

Просто посмотрите здесь, чтобы получить дополнительную информацию о журнал и Вот о строках разного формата.