X-Forwarded-For
ヘッダーを追加し、クライアントの実際のIPをログに記録するには、ApacheでLogFormatを変更する必要があります。 httpd.confファイルで編集しようとしましたが、LogFormatの2つの別々の部分が見つかりました。そのため、重複しているかどうか、削除する必要があるかどうか、どの編集するかわからないのか、すべて編集する必要があるのかわかりません。これについてアドバイスが必要です。
これが最初の部分です:
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog "logs/access_log" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
</IfModule>
2番目の部分:
<IfModule mod_log_config.c>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog logs/access_log common
</IfModule>
前編と後編の違いがわかりません。 2つの部分で2つの線が重複していることがわかります。では、どの部分を編集すればよいですか? 1つの部分から重複する行を削除し、他の部分を保持しても安全ですか?重複しない行を1つのパーツに結合できますか?ありがとうございました。
IfModuleディレクティブは、モジュールがロードされた場合にのみ構成を取得します。ロードされているモジュールを確認するには、次のコマンドを使用できます
httpd -M -f path-to-config-file
Linuxを使用するhttpd -t -D DUMP_MODULES
ウィンドウを使用する例
[root@apachesrv bin]# httpd -M -f conf/httpd-vserver.conf
Loaded Modules:
core_module (static)
...
log_config_module (shared)
...
proxy_http_module (shared)
schema_module (shared)
Syntax OK
この場合、log_config_moduleを使用していることがわかります。そのため、(私の場合は)構成が必要になります。
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog "logs/access_log" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
</IfModule>
必要な情報を取得するには、次のようなログを構成する必要があります。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{X-Forwarded-For}i\"" combinedcustomized
次に、アクセスログを次のように変更します。
CustomLog logs/access.log combinedcustomized
編集:
Apacheドキュメントには、ログに記録できるパラメータのリストがあります http://httpd.Apache.org/docs/2.4/mod/mod_log_config.html
私のcentos 7.4では、私は
<IfModule log_config_module>
httpd.confのディレクティブとlog_config_moduleは、/ etc/httpd/conf.modules.d /00-base.conf構成ファイルを介してロードされます
私はそれが機能するようにこの行を変更しただけです。 (ただし、クライアントIPの新しい行があるため、ログ形式を変更します)
LogFormat "%h %{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
それを行うためのより「エレガントな」方法があります(x-forwarded-forフィールドが存在する場合はプロキシIPをクライアントIPに置き換えることによって)が、それを機能させることができません(プロキシIPのみが表示されます)
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combied
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy
SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded
CustomLog "logs/access_log" combined env=!forwarded
CustomLog "logs/access_log" proxy env=forwarded
Apache docs によると、両方のセクションは同等です:
Description: Logging of the requests made to the server
Status: Base
Module Identifier: log_config_module
Source File: mod_log_config.c
使用したくないと思われるものを削除(またはコメントアウト)します。そうしないと、何らかの理由で順序を変更する(したがって優先順位を変更する)と、後であらゆる種類の頭痛が発生します。