文档章节

Apache优化——日志管理

阿dai学长
 阿dai学长
发布于 2017/08/01 18:55
字数 1876
阅读 95
收藏 0

11.22 访问日志不记录静态文件

编辑虚拟主机配置文件“httpd-vhosts.conf”:  

[root@adailinux ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
……
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.example.com
    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_HOST} !^111.com$
        RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
    </IfModule>
    ErrorLog "logs/111.com-error_log"
    SetEnvIf Request_URI ".*\.gif$" img
    SetEnvIf Request_URI ".*\.jpg$" img 
    SetEnvIf Request_URI ".*\.png$" img
    SetEnvIf Request_URI ".*\.bmp$" img
    SetEnvIf Request_URI ".*\.swf$" img
    SetEnvIf Request_URI ".*\.js$" img
    SetEnvIf Request_URI ".*\.css$" img  
    #以上为定义变量:将所有关于图片的请求定义为变量img
    CustomLog "logs/111.com-access_log" combined env=!img
    #“env=!img”表示非img变量。本行命令的含义是:不记录关于变量img的请求日志。
</VirtualHost>

说明: 将所有访问图片的请求定义为变量img,在访问记录(日志)中将其排除即可。重新加载后使用curl访问img变量中所指定格式的文件内容时将不会产生访问记录。  


扩展:

apache日志记录客户端请求的域名  

正常情况下,根本就没有必要记录这一项,毕竟咱们大都根据虚拟主机来设置相应的访问日志,但也有个别的情况,比如 ServerName *.abc.com这样泛解析的形式,所以有必要记录一下用户请求的域名到底是哪个。 而apache的LogFormat 中正好有一项值满足了这个需求。即 %V  这里是大写的V ,小写的v 记录的是咱们在虚拟主机中设置的ServerName ,这个的确是没有必要记录的。

apache只记录指定URI的日志

需求: 把类似请求 www.aaa.com/aaa/... 这样的请求才记录日志。  

方法:   在httpd.conf 或者 相关的虚拟主机配置文件中添加:  

SetEnvIf Request_URI "^/aaa/.*" aaa-request  
CustomLog "|/usr/local/apache/bin/rotatelogs -l /usr/local/apache/logs/aaa-access_%Y%m%d.log 86400" combined env=aaa-request

原理和不记录图片等静态访问的日志( http://www.lishiming.net/thread-561-1-1.html )是一样的。  

apache日志中记录代理IP以及真实客户端IP  

默认情况下log日志格式为:  

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

,其中%h 是记录访问者的IP,如果在web的前端有一层代理,那么这个%h其实就是代理机器的IP,这不是我们想要的。我们需要的是记录客户端的真实IP,“%{X-FORWARDED-FOR}i ”该字段会记录客户端真实IP,所以log日志的格式应改为:

LogFormat "%h %{X-FORWARDED-FOR}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

11.23 访问日志切割

配置

编辑虚拟主机配置文件:

[root@adailinux ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
……
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.example.com
    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_HOST} !^111.com$
        RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
    </IfModule>
    ErrorLog "logs/111.com-error_log"
    SetEnvIf Request_URI ".*\.gif$" img
    SetEnvIf Request_URI ".*\.jpg$" img 
    SetEnvIf Request_URI ".*\.png$" img
    SetEnvIf Request_URI ".*\.bmp$" img
    SetEnvIf Request_URI ".*\.swf$" img
    SetEnvIf Request_URI ".*\.js$" img
    SetEnvIf Request_URI ".*\.css$" img  
    CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img
    #使用rotatelogs工具,以系统时间为基准,每天切割一次日志,并且日志名字格式为“111.com-access_%Y%m%d.log”。
    
    #每小时切割一次日志,语法: 
    #CustomLog "|/usr/local/apache2.4/bin/rotatelogs logs/access_%Y%m%d%H.log 3600" combined

    

说明: rotatelogs是Apache切割日志的工具;-l表示使用系统(CST=Chinese time)时间,如果加-l选项,将以默认的(UTC)时间为准;日志文件名“%Y%m%d”表示年月日;时间间隔设定为一天(1day=24h=1440min=86400s)。  

检测  

  • 重载配置文件:  
[root@adailinux 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@adailinux 111.com]# /usr/local/apache2.4/bin/apachectl graceful
  • 访问、检测日志:  
[root@adailinux ~]# curl -x192.168.8.131:80 111.com/http.jpg -I

[root@adailinux 111.com]# ls /usr/local/apache2.4/logs/
111.com-access_20170801.log  111.com-error_log   abc.com-error_log  error_log
111.com-access_log           abc.com-access_log  access_log         httpd.pid

说明: 配合计划任务使用,定期清理日志文件,避免日志文件累计导致磁盘空间不足。


扩展:

rotatelogs命令  

语法:    rotatelogs [ -l ] logfile [ rotationtime [ offset ]]    rotatelogs [ filesizeM ]  logfile  

选项:   -l:使用本地时间代替GMT时间作为时间基准。注意:在一个改变GMT偏移量(比如夏令时)的环境中使用-l会导致不可预料的结果。所以一定要加上-l 否则出现的日志时间和实际时间是相差8小时的。   rotationtime:日志文件滚动的以秒为单位的间隔时间。   offset:相对于UTC的时差的分钟数。如果省略,则假定为”0″并使用UTC时间。比如,要指定UTC时差为”-5小时”的地区的当地时间,则此参数应为”-300″。   filesizeM:指定以filesizeM文件大小滚动,而不是按照时间或时差滚动。  

日志切割方法2:  

使用cronolog命令:  

一:每一天建立一个新日志
CustomLog "|bin/cronolog logs/access_%Y%m%d.log" combined

二:每小时建立一个新日志 
CustomLog "|bin/cronolog logs/access_%Y%m%d%h.log" combined

11.24 静态元素过期时间

当浏览器访问网站时会把静态文件(如图片文件、css、js文件等)缓存到本地电脑,这样下次访问的时候就不用去远程下载了,可以自定义清除该部分缓存的时间,即设定静态元素过期时间。该设置可用于优化网站,特别是公司内网。  

配置  

编辑虚拟主机配置文件:  

[root@adailinux ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
……
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.example.com
    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_HOST} !^111.com$
        RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
    </IfModule>

<IfModule mod_expires.c>
    ExpiresActive on  
    #打开该功能的开关 
    ExpiresByType image/gif  "access plus 1 days"
    ExpiresByType image/jpeg "access plus 24 hours"
    ExpiresByType image/png "access plus 24 hours"
    ExpiresByType text/css "now plus 2 hour"
    ExpiresByType application/x-javascript "now plus 2 hours"
    ExpiresByType application/javascript "now plus 2 hours"
    ExpiresByType application/x-shockwave-flash "now plus 2 hours"
    ExpiresDefault "now plus 0 min"
    #以上是定义不同类型的文件缓存的时间
</IfModule>
    ErrorLog "logs/111.com-error_log"
    SetEnvIf Request_URI ".*\.gif$" img
    SetEnvIf Request_URI ".*\.jpg$" img 
    SetEnvIf Request_URI ".*\.png$" img
    SetEnvIf Request_URI ".*\.bmp$" img
    SetEnvIf Request_URI ".*\.swf$" img
    SetEnvIf Request_URI ".*\.js$" img
    SetEnvIf Request_URI ".*\.css$" img  
    CustomLog "|usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img
    #使用rotatelogs工具,以系统时间为基准,每天切割一次日志,并且日志名字格式为“111.com-access_%Y%m%d.log”。

说明: 在配置文件添加mod_expires.c模块内容,其余不变。  

检测  

检测语法错误:  
[root@adailinux 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK

检测Apache配置文件是否开启expire模块:  
[root@adailinux 111.com]# /usr/local/apache2.4/bin/apachectl -M |grep expires

说明: 在此未检测到expires模块,所以需要编辑Apache配置文件,加载expires模块。    

配置Apache,加载expires模块  

编辑Apache配置文件:  

[root@adailinux 111.com]# vim /usr/local/apache2.4/conf/httpd.conf

LoadModule expires_module modules/mod_expires.so

加载配置文件:
[root@adailinux 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@adailinux 111.com]# /usr/local/apache2.4/bin/apachectl graceful

检查模块是否开启:
[root@adailinux 111.com]# /usr/local/apache2.4/bin/apachectl -M |grep expires
 expires_module (shared)

说明: 输入“/”查找expires模块,并开启加载该模块的命令行(去掉#即可)。  

再次检测

[root@adailinux 111.com]# curl -x192.168.8.131:80 111.com/baidu.png -I
HTTP/1.1 200 OK
Date: Tue, 01 Aug 2017 10:17:36 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
Last-Modified: Tue, 01 Aug 2017 10:13:45 GMT
ETag: "e7a-555ae670b0840"
Accept-Ranges: bytes
Content-Length: 3706
Cache-Control: max-age=86400
Expires: Wed, 02 Aug 2017 10:17:36 GMT
Content-Type: image/png

说明: 当前时间“Date: Tue, 01 Aug 2017 10:17:36 GMT”,缓存时长“Cache-Control: max-age=86400s”,失效时间“Expires: Wed, 02 Aug 2017 10:17:36 GMT”,即png格式图片缓存时长为1天。

© 著作权归作者所有

阿dai学长
粉丝 75
博文 262
码字总数 336161
作品 0
朝阳
运维
私信 提问
Log4j使用及配置

日志管理往往在项目中起着非常重要的作用,日志信息便于我们分析程序的执行情况,比较常用的日志工具有logging和log4j,当然还有其他很多种。为了实现日志的统一管理和配置,继而出现了slf4j...

邵鸿鑫
2016/02/23
0
0
关于Apache的25个初中级面试题

2014-04-03 程序猿 本文涵盖了25个有趣的Apache工作面试中会提出的问题,并附带有它们的答案,因此你可以方便的理解也许你之前从来没有见到过的一些有关于Apache的新事物. 在你开始阅读这篇文...

Yamazaki
2014/04/13
40
0
Apache Solr:基于Lucene的可扩展集群搜索服务器

Solr Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出...

长平狐
2013/01/06
284
0
一步一步学solr:什么是solr?

简介 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出...

王爵nice
2014/07/22
1K
0
The based of tuning

调优目的: 1、 提高资源利用率 2、 找出性能瓶颈并缓解 3、 通过性能管理实现合理的资源分配,提升硬件性价比 调优分层及效率问题: 业务级调优 eg:1)网站使用的Apache—>业务架构 2)将原...

卡子火
2017/05/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

iota硬件集成实战教程

本教程面向iota初学者,我们将学习如何开发基于指定IOTA地址的余额来闭合或断开一个连接到树莓派上的继电器,点亮或熄灭LED。教程虽然简单,但足以展示IOTA的强大能力。 我们将使用一个联网的...

汇智网教程
4分钟前
0
0
influxdb-1.7.8绿色安装-centos7

influxdb作为一款性能强悍的时序数据库, 一旦拥有, 别无所求. 本文介绍它的绿色安装方法. 环境准备, 下载, 解压. [dev5@7bdc6644c7c4 influxdb-1.7.8] cat /etc/redhat-release CentOS Linu...

dev5
7分钟前
0
0
Java 11 新特性

java 11 是继 java8 之后的第一个LTS版本。因此有必要针对它进行一些深入的学习,虽然短时间内java8 还是主流版本。当然,如果从java8基础上升级,几乎可以确定目标就是java11。 同时也要明确...

polly
9分钟前
0
0
SVG

本文转载于:专业的前端网站➯SVG SVG 是使用 XML 来描述二维图形和绘图程序的语言。 SVG 使用 XML 编写。 一、什么是SVG? SVG 指可伸缩矢量图形,使用 XML 格式定义图形,SVG图像在放大或改...

前端老手
10分钟前
1
0
zabbix server proxy

server./configure --prefix=/data/zabbix3.4 --enable-server --enable-agent --with-net-snmp --with-libcurl --enable-proxy --with-mysql=/data/mysql-5.6.44-linux-glibc2.12-x8......

雁南飞丶
10分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部