我正在使用以下版本的 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>
总而言之,这将保留您当前的功能并将记录到相应的文件
祝你好运,希望这会有所帮助。