Apache에서 URL 체계 (http / https)를 기록하는 방법은 무엇입니까? log_format있습니다. %H 요청 프로토콜입니다 (예 : “HTTP /

nginx는 $scheme변수를 사용할 수 log_format있습니다.

%H 요청 프로토콜입니다 (예 : “HTTP / 1.1”).

Apache와 동일한 작업을 수행하려면 어떻게해야합니까?



답변

이를 수행하는 한 가지 방법 CustomLogHTTPS변수 설정 여부에 따라 제어되는 두 개의 조건부 지시문 을 갖는 것입니다.

CustomLog logs/access.log "https://..." env=HTTPS
CustomLog logs/access.log "http://..." env=!HTTPS

나는 또한 SetEnvIf다음과 같은 방식으로 사용하려고 시도했지만 작동하지 않습니다 (it logs -).

SetEnv URL_SCHEME=http
SetEnvIf HTTPS on URL_SCHEME=https
CustomLog logs/access.log "%{URL_SCHEME}e://..."


답변

어떤 이유로 든 위의 예제를 작동시킬 수 없으므로 다른 방법을 찾았습니다. 다음과 같이 구성에 2 개의 다시 쓰기 규칙을 추가 할 수 있습니다.

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [E=SCHEME:HTTP]

RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [E=SCHEME:HTTPS]

그런 다음 이것을 LogFormat 정의에 추가하십시오.

scheme=\"%{SCHEME}e\"


답변

URL 스키마는 아파치 로그 형식으로 직접 사용할 수 없으므로 % p를 대안으로 사용하여 요청을 제공하는 서버의 표준 포트 (예 : 80/443)를 기록 할 수 있습니다.

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}xmod_ssl이로드 된 경우에만 사용할 수 있습니다 ( https://httpd.apache.org/docs/trunk/mod/mod_ssl.html#logformats 참조).


답변

로그 출력을 정의하고 % H를 추가하십시오. 이것은 Apache에서도 마찬가지입니다.

따라서 LogFormat이와 같이 빌드 하고 기본 아파치 구성에 몇 가지가 정의되어 있습니다.

LogFormat "%h %l %u %t \"%r\" %>s %b" common

LogFormat의 이름을 로그 파일 호출의 끝에 추가하십시오 (이 경우 “common”).

CustomLog logs/access_log common

로그 및 다른 형식 문자열에 대한 자세한 내용은 여기를 참조 하십시오 .


답변