nginxには$scheme
変数はその中で使用可能log_format
行。
%H
は要求プロトコルです(例:「HTTP/1.1」)。
Apacheでどうすれば同じことができますか?
これを行う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://..."
URLスキームはApacheログ形式では直接利用できないため、代わりに%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
何らかの理由で上記の例を機能させることができなかったため、別の方法を見つけました。次のように、2つの書き換えルールを構成に追加できます。
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [E=SCHEME:HTTP]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [E=SCHEME:HTTPS]
次に、これをLogFormat定義に追加します。
scheme=\"%{SCHEME}e\"