web-dev-qa-db-ja.com

ApacheでURLスキーム(http / https)をログに記録する方法は?

nginxには$scheme変数はその中で使用可能log_format行。

%Hは要求プロトコルです(例:「HTTP/1.1」)。

Apacheでどうすれば同じことができますか?

8

これを行う1つの方法は、CustomLog変数が設定されているかどうかによって制御される2つの条件付き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://..."
3

URLスキームはApacheログ形式では直接利用できないため、代わりに%pを使用して、リクエストを処理するサーバーの正規ポート(80/443など)をログに記録できます。

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

これは、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

3
David Caldwell

何らかの理由で上記の例を機能させることができなかったため、別の方法を見つけました。次のように、2つの書き換えルールを構成に追加できます。

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

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

次に、これをLogFormat定義に追加します。

scheme=\"%{SCHEME}e\"
3
bstokes