web-dev-qa-db-ja.com

ApacheでのLogFormatの変更

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つのパーツに結合できますか?ありがとうございました。

3
Mina Hafzalla

IfModuleディレクティブは、モジュールがロードされた場合にのみ構成を取得します。ロードされているモジュールを確認するには、次のコマンドを使用できます

  • httpd -M -f path-to-config-fileLinuxを使用する
  • および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

2
alphamikevictor

私の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
0
Max

Apache docs によると、両方のセクションは同等です:

Description:    Logging of the requests made to the server
Status: Base
Module Identifier:  log_config_module
Source File:    mod_log_config.c

使用したくないと思われるものを削除(またはコメントアウト)します。そうしないと、何らかの理由で順序を変更する(したがって優先順位を変更する)と、後であらゆる種類の頭痛が発生します。

0
Droopy4096