11.22 访问日志不记录静态文件
编辑虚拟主机配置文件 httpd-vhosts.conf:
- [root@centos-01linux ~]# 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 RequestURI "^/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@centos-01linux ~]# 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 RequestURI ".*.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@centos-01linux 111.com]# /usr/local/apache2.4/bin/apachectl -t
- Syntax OK
- [root@centos-01linux 111.com]# /usr/local/apache2.4/bin/apachectl graceful
访问检测日志:
- [root@centos-01linux ~]# curl -x192.168.8.131:80 111.com/http.jpg -I
- [root@centos-01linux 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 静态元素过期时间
当浏览器访问网站时会把静态文件 (如图片文件 cssjs 文件等) 缓存到本地电脑, 这样下次访问的时候就不用去远程下载了, 可以自定义清除该部分缓存的时间, 即设定静态元素过期时间该设置可用于优化网站, 特别是公司内网
配置
编辑虚拟主机配置文件:
- [root@centos-01linux ~]# 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 RequestURI ".*.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@centos-01linux 111.com]# /usr/local/apache2.4/bin/apachectl -t
- Syntax OK
检测 Apache 配置文件是否开启 expire 模块:
[root@centos-01linux 111.com]# /usr/local/apache2.4/bin/apachectl -M |grep expires
说明: 在此未检测到 expires 模块, 所以需要编辑 Apache 配置文件, 加载 expires 模块
配置 Apache, 加载 expires 模块
编辑 Apache 配置文件:
- [root@centos-01linux 111.com]# vim /usr/local/apache2.4/conf/httpd.conf
- LoadModule expires_module modules/mod_expires.so
加载配置文件:
- [root@centos-01linux 111.com]# /usr/local/apache2.4/bin/apachectl -t
- Syntax OK
- [root@centos-01linux 111.com]# /usr/local/apache2.4/bin/apachectl graceful
检查模块是否开启:
- [root@centos-01linux 111.com]# /usr/local/apache2.4/bin/apachectl -M |grep expires
- expires_module (shared)
说明: 输入 / 查找 expires 模块, 并开启加载该模块的命令行(去掉 #即可)
再次检测
- [root@centos-01linux 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 天
来源: http://www.bubuko.com/infodetail-2517074.html