web-dev-qa-db-ja.com

サーバーとは異なるドメインのApacheサーバーログエントリを分離するにはどうすればよいですか?

次のバージョンのApacheを使用しています...

httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Apr 24 2019 13:45:48

/ var/log/httpd/access_logファイルに、自分のドメインではないドメイン用のエントリがたくさんあります...

79.143.191.42 - - [17/Dec/2019:10:36:30 -0500] "GET http://www.guenstiger.de/Produkt/Prada/Infusion_d_Homme_Deodorant_100_ml.html HTTP/1.1" 400 64146 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/536.26.17 (KHTML like Gecko) Version/6.0.2 Safari/536.26.17"

ドメインがサーバーに解決されないため、これらのエントリがログファイルにどのように反映されるのかわかりませんが、これらのリクエストを別のログファイルにまとめる方法はありますか?

編集: これが私のVirtualHost設定です(回答からの提案の後に行われます)...

<VirtualHost *:80>
    CustomLog /var/log/httpd/garbage_access_log common
</VirtualHost>
<VirtualHost *:80>
    ServerName mydomein.com

    Alias /static /var/www/html/myproject/static
    <Directory /var/www/html/myproject/static>
        Require all granted
    </Directory>

    # Next, add the following directory block
    <Directory /var/www/html/myproject>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    WSGIDaemonProcess myproject python-home=/var/www/html/venv python-path=/var/www/html
    WSGIProcessGroup myproject
    WSGIScriptAlias / /var/www/html/myproject_project/wsgi.py

</VirtualHost>

編集: 与えられた提案に応えて、私はこれを試しました

<If "%{HTTP_Host} == 'mydomein.com'">
    CustomLog /var/log/httpd/access_log common
<Else>
    CustomLog /var/log/httpd/other_access_log common
    ErrorDocument 421 "%{HTTP_Host} is not available here"
</If>

エラーが発生しました...

Expected </Else> but saw </If>

そして私はこれを試しました...

<If "%{HTTP_Host} == 'mydomein.com'">
    CustomLog /var/log/httpd/access_log common    # Error on this line
</If>
<Else>
    CustomLog /var/log/httpd/other_access_log common
    ErrorDocument 421 "%{HTTP_Host} is not available here"
</Else>

しかし、これはエラーとなりました

CustomLog not allowed here
3
Dave

これらのリクエストは、誰かがウェブサーバーをプロキシとして使用しようとしているように見えます。エラーコード400は、それらが成功しなかったことを意味します。

これらのリクエストにHost: ...ヘッダーが付属していない場合、1つの default VirtualHost を使用して、実際のWebサイトで ServerName を使用してそのようなリクエストと他のVirtualHost環境をキャッチできます。 。

次に、Logステートメント VirtualHostディレクティブ内 を指定することにより、異なる環境に異なるログファイルを使用できます。

これは次のようになります。

<VirtualHost *:80>
  ...
  CustomLog /var/www/domains/default/Apache.access.log common
</VirtualHost>

<VirtualHost *:80>
  ServerName mydomein.com
  ...
  CustomLog /var/www/domains/mydomein.com/Apache.access.log common
</VirtualHost>
1
Mathias Weidner

CustomLogディレクティブの構文とカスタムログについて:

条件付きロギングが提供されるため、リクエストの特性に基づいて個々のリクエストをログに含めたり、ログから除外したりできます。

「リクエストの特性」にはHostヘッダーが含まれます

構文: CustomLogファイル|パイプ形式|ニックネーム[env = [!]環境変数| expr = expression])

3番目の引数はオプションであり、特定の要求をログに記録するかどうかを制御します...条件は、任意のブール式として表すことができます。条件が満たされない場合、リクエストはログに記録されません。

最も簡単な解決策は、次のように、CustomLogの最後に式を追加することです。

<VirtualHost *:80>
    ServerName mydomein.com
    
    # Use the Host header to determine where to log
    # Use the Host header to determine how to respond. 
    CustomLog /var/log/httpd/access_log common "expr=%{HTTP_Host} == 'mydomein.com'"
    CustomLog /var/log/httpd/garbage_access_log common "expr=%{HTTP_Host} != 'mydomein.com'"

    Alias /static /var/www/html/myproject/static
    <Directory /var/www/html/myproject/static>
        Require all granted
    </Directory>

    # Next, add the following directory block
    <Directory /var/www/html/myproject>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    WSGIDaemonProcess myproject python-home=/var/www/html/venv python-path=/var/www/html
    WSGIProcessGroup myproject
    WSGIScriptAlias / /var/www/html/myproject_project/wsgi.py

</VirtualHost>

要約すると、これにより現在の機能が維持され、適切なファイルに記録されます

幸運を祈ります。これがお役に立てば幸いです。

0
mikey