web-dev-qa-db-ja.com

Apache LogFormat:常に完全なドメイン名をログに記録します

多くの異なるドメインをホストする1つのサーバーがあります。このサーバーは段階的に廃止されているため、このサーバーを指すドメインがまだあるかどうかを確認する必要があります。 Apacheログにこれらのドメイン名を報告してもらいたいのですが。

Apacheログには次のデータが表示されます。

163.172.66.133 --- [16/Dec/2016:11:37:40 +0100] "GET/en/page/test HTTP/1.1" 301-"-" "Mozilla/5.0(互換; AhrefsBot/5.1; +- http://ahrefs.com/robot/ ) "

要求されたページの完全なドメイン名である必要があります。

163.172.66.133 --- [16/Dec/2016:11:37:40 +0100] "GET https://www.domainname.com/ en/page/test HTTP/1.1 "301-"-"" Mozilla/5.0(互換; AhrefsBot/5.1; + http://ahrefs.com/robot/ ) "

次のLogFormatを使用します。

LogFormat "%h %l %u %t \"%m http://%v:%p%U\" %>s %b" common

完全なドメイン名が表示されることもありますが、ほとんどの場合は表示されません。

ドメイン名を常に表示するにはどうすればよいですか?

2
SPRBRN

ログ形式の 公式ドキュメント を見ると、フラグ%vまたは%Vが、Canonicalを提供するため、興味のあるものであることがわかります。構成されているServerName。したがって、最終的に要求に応答したのは、ブロックで構成されたServerNameになります。

指定したLogFormat行にはすでにその識別子が含まれているため、ログ形式を設定する構成が複数存在する可能性があり、ホストを含​​まないログ行はその異なる形式に基づいています。あなたのフォーマットはあなたにあなたの2番目の例のようにフォーマットされたラインを常に得るはずです。

それでも問題になる可能性があるのは、ワイルドカードドメインを構成していて、どの完全なFQDNが要求であったかを確認できないことです。 Apache LogFormat定義で%vを使用すると、要求された特定の仮想ホストではなくServerNameと一致します というタイトルの質問は、識別子%{Host}を使用して「クライアントパースペクティブ」を取得できることを示唆しているため、リクエストヘッダー。

LogFormat行を含むすべての構成ファイルを見つけるには、次のような別の質問を見ることができます。 Linuxで特定のテキストを含むすべてのファイルを見つける方法は?

2
Seth