nginx는 $scheme
변수를 사용할 수 log_format
있습니다.
%H
요청 프로토콜입니다 (예 : “HTTP / 1.1”).
Apache와 동일한 작업을 수행하려면 어떻게해야합니까?
답변
이를 수행하는 한 가지 방법 CustomLog
은 HTTPS
변수 설정 여부에 따라 제어되는 두 개의 조건부 지시문 을 갖는 것입니다.
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}x
mod_ssl이로드 된 경우에만 사용할 수 있습니다 ( https://httpd.apache.org/docs/trunk/mod/mod_ssl.html#logformats 참조).