11.22 访问日志不记录静态文件javascript
11.23 访问日志切割php
11.24 静态元素过时时间css
扩展 java
apache日志记录代理IP以及真实客户端IP http://ask.apelearn.com/question/960linux
apache只记录指定URI的日志 http://ask.apelearn.com/question/981apache
apache日志记录客户端请求的域名 http://ask.apele...vim
11.22 访问日志不记录静态文件:浏览器
访问网站的元素都有哪些,谷歌浏览器的话按F12。咱们在访问一个页面的时候,他其实加载了不少的元素,以下图缓存
其中每一行都是一个请求,每一行都有一个地址,这就是一个请求,这些请求就会记录日志并且咱们主要就是看这些。服务器
可是其中网站大多元素为静态文件,如图片、css、js等,这些元素能够不用记录
把虚拟主机配置文件改为以下(至关于定义了一个环境):
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias 123.com
SetEnvIf Request_URI ".*\.gif$" img 正则,就是符合.gif的为img(可随便写,不必定非得是img)。 凡是一下这几种请求的都叫 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 "logs/111.com-access_log" combined env=!img 在这一行(Custonlog)上面加入。
env=!img 咱们上面定义的img,凡是符合定义的img的否不会记录到这里
</VirtualHost>
从新加载配置文件 -t, graceful
mkdir /data/wwwroot/111.com/images 建立目录,并在这目录下上传一个图片
curl -x127.0.0.1:80 -I 111.com/images/123.jpg
tail /usr/local/apache2.4/logs/123.com-access_log
实例:
[root@axinlinux-01 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
ErrorLog "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 "logs/111.com-access_log" combined env=!img
</VirtualHost>
[root@axinlinux-01 ~]# cd /data/wwwroot/111.com
[root@axinlinux-01 111.com]# rz
[root@axinlinux-01 111.com]# ls
123.php index.php 端口映射.jpg
[root@axinlinux-01 111.com]# mv 端口映射.jpg abc.jpg
[root@axinlinux-01 111.com]# ls
123.php abc.jpg index.php
[root@axinlinux-01 111.com]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@axinlinux-01 111.com]# /usr/local/apache2/bin/apachectl graceful
httpd not running, trying to start
[root@axinlinux-01 111.com]# curl -x192.168.159.128:80 111.com/abc.jpg -I 咱们测试abc.jpg,成功
HTTP/1.1 200 OK
Date: Fri, 03 Aug 2018 15:09:52 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.32
Last-Modified: Sat, 14 Jul 2018 15:36:37 GMT
ETag: "7a91-570f75ca36b40"
Accept-Ranges: bytes
Content-Length: 31377
Content-Type: image/jpeg
[root@axinlinux-01 111.com]# tail /usr/local/apache2/logs/111.com-access_log 这里却没有显示咱们测试的访问记录
192.168.159.128 - - [03/Aug/2018:23:02:04 +0800] "GET HTTP://111.com/abc.com HTTP/1.1" 404 205 "-" "curl/7.29.0"
192.168.159.128 - - [03/Aug/2018:23:02:08 +0800] "HEAD HTTP://111.com/abc.com HTTP/1.1" 404 - "-" "curl/7.29.0"
192.168.159.128 - - [03/Aug/2018:23:09:42 +0800] "HEAD HTTP://111.com/abc.jpg1 HTTP/1.1" 404 - "-" "curl/7.29.0"
----------------------------------------------------------------------------------------------------------------------------------------------------
11.23 访问日志切割:
日志一直记录总有一天会把整个磁盘占满,因此有必要让它自动切割,并删除老的日志文件
把虚拟主机配置文件改为以下:
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias 123.com
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/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img 只须要在这一行加入 红色部分(rotatelogs是Apache自带的切割工具)
-l是让他以当前系统的时间为基准(时区。咱们中国是CST,默认是美国UTC)data命令能够看到
%Y%m%d.log定义变量,也及时切割后的名字以咱们设置的变量(年月日)来命名
86400 就是86400秒。定义天天切割,也就是86400秒
</VirtualHost>
从新加载配置文件 -t, graceful
curl -x192.168.159.128:80 111.com -I 访问才会生成
ls /usr/local/apache2.4/logs
注意:咱们仅仅只是让他每日切割。还须要作一个任务计划,让他每日删除,只保留这一个
----------------------------------------------------------------------------------------------------------------------------------------------------
11.24 静态元素过时时间:
咱们在访问网站的时候,好比一些图片会自动下载到咱们的电脑里,下次在访问的时候就不用再去服务器下载了。但这些缓存的文件是根据咱们浏览器的设定来决定时间清理的,或者是电脑管家帮咱们清理
若是咱们再次访问这个图片,浏览器检测到这个图片没有更改跟咱们本地缓存的同样,就不会再次下载,就会显示状态码304,
这样对于服务器是好的,能够节省带宽。可是没有定义何时过时,万一咱们对这个图片作了更改呢,这就须要咱们设置静态元素的过时时间:
增长配置
<IfModule mod_expires.c> 用到expires模块
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>
须要expires_module 主配置文件,搜索expires,将这个模块打开(注释去掉)
-t graceful
curl测试,看cache-control: max-age
实例:
[root@axinlinux-01 wwwroot]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<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>
[root@axinlinux-01 wwwroot]# /usr/local/apache2/bin/apachectl -M | grep expires 显示没有打开
[root@axinlinux-01 ~]# vim /usr/local/apache2/conf/httpd.conf
LoadModule expires_module modules/mod_expires.so 把expires模块注释去掉
[root@axinlinux-01 ~]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@axinlinux-01 ~]# /usr/local/apache2/bin/apachectl graceful
[root@axinlinux-01 ~]# curl -x192.168.159.128:80 111.com/abc.jpg -I
HTTP/1.1 200 OK
Date: Fri, 03 Aug 2018 16:13:44 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.32
Last-Modified: Sat, 14 Jul 2018 15:36:37 GMT
ETag: "7a91-570f75ca36b40"
Accept-Ranges: bytes
Content-Length: 31377
Cache-Control: max-age=86400 观察这个,咱们刚设置的。生效
Expires: Sat, 04 Aug 2018 16:13:44 GMT
Content-Type: image/jpeg