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


回答:


3

これを行う1つの方法はCustomLogHTTPS変数が設定されているかどうかによって制御される2つの条件付きディレクティブを持つことです。

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://..."

1
構文エラーのmod_envために作業が失敗した可能性があります。SetEnv変数と値を等号なしで取得します:SetEnv URL_SCHEME http
glasz 2014

1
また、SetEnvIfので、ラインは、Apache <2.4.1で動作しないmod_setenvif明らかに持っていないSSL環境へのアクセスを。2.2.22に夢中になってしまいました。
glasz 2014

この環境変数はmod_sslに固有のようです。mod_gnutlsなどの別のモジュールを使用する場合、それはありません。
bortzmeyer 2014

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

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

これはどうして2つの賛成票をすぐに獲得したのですか?とにかく、これは、プロトコルURIスキームが必要なリクエストのURLを効果的にログに記録したい場合には役に立ちません。
Vladimir Panteleev、2015

ポートはプロトコルを示します。
ウィック

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を参照してください。



%{VARNAME} xはどこに記録されていますか?httpd.apache.org/docs/current/mod/mod_log_config.htmlはx変数について言及していません。動作確認済み。
Artem Russakovskii 2017年

-2

ログ出力を定義し、それに%Hを追加します。これはApacheでも同じです。

したがって、あなたはLogFormatこのようなものを構築し、デフォルトのApache構成で定義されたカップルがあります

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.