如何分离与我的服务器不同的域的 Apache 服务器日志条目?

如何分离与我的服务器不同的域的 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

答案1

这些请求看起来像是有人试图将您的网络服务器用作代理。错误代码 400 表示请求未成功。

如果这些请求没有标Host: ...头,则可以使用一个默认虚拟主机捕获此类请求和其他 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>

答案2

关于 CustomLog 指令的语法和自定义日志记录:

提供条件日志记录,以便可以根据请求的特征将单个请求纳入或排除在日志之外。

“请求的特征”包含主机头

句法:CustomLog 文件|管道格式|昵称 [env=[!]环境变量| expr=表达式])

第三个参数是可选的,用于控制是否记录特定请求...条件可以表示为任意布尔表达式。如果不满足条件,则不会记录请求。

看来最简单的解决方案是在 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>

总而言之,这将保留您当前的功能并将记录到相应的文件

祝你好运,希望这会有所帮助。

相关内容