Apache에서 URL 체계 (http / https)를 기록하는 방법은 무엇입니까?


8

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

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

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

답변:


3

이를 수행하는 한 가지 방법 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://..."

1
구문 오류로mod_env 인해 사용자의 노력이 실패했을 수 있습니다 . 등호없이 변수와 값을 가져옵니다 . SetEnvSetEnv URL_SCHEME http
glasz

1
또한, SetEnvIf때문에 라인은 아파치 <2.4.1에서 작동하지 않습니다 mod_setenvif분명히이 없다 는 SSL 환경에 액세스 할 수 . 2.2.22에 거의 나를 미치게했다.
glasz

이 환경 변수는 mod_ssl에만 해당됩니다. mod_gnutls와 같은 다른 모듈을 사용하는 경우 해당 모듈이 없습니다.
bortzmeyer

또한 mod_ssl환경 변수를 통해 명시 적으로 지시 한 경우에만 환경 변수를 설정하십시오 SSLOptions.
Florian Brucker

3

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

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

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

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

scheme=\"%{SCHEME}e\"

3

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

CustomLog access.log "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" port:%p"

이것이 어떻게 두 개의 공감대를 그렇게 빨리 얻었습니까? 어쨌든 프로토콜 URI 체계가 필요한 요청의 URL을 효과적으로 기록하려는 경우에는 유용하지 않습니다.
블라디미르 판 텔레 예프

포트는 프로토콜을 나타냅니다.
Wick

3

이것은 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 참조).


httpd.apache.org/docs/current/mod/mod_rewrite.html 에이 변수가 기록되어 있습니다.
Artem Russakovskii

% {VARNAME} x은 (는) 어디에 문서화되어 있습니까? httpd.apache.org/docs/current/mod/mod_log_config.html 은 x 변수를 언급하지 않습니다. 그래도 작동 확인되었습니다.
Artem Russakovskii

-2

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

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

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

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

CustomLog logs/access_log common

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


1
음 ... 벌써 봤어요 나는 내 질문에 %H내가 필요한 것을 하지 않는다고 진술했다 .
블라디미르 판 텔레 예프
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.