|NO.Z.00054|——————————|^^ 部署 ^^|——|Linux&Apache.V04|——|Apache日志切割|静态缓存|禁止解析PHP|
一、Apache日志切割
### --- Apache日志切割
~~~ 我们没访问一次网站,那么就会记录若干条日志,如果日志不去管理,
~~~ 时间长了日志文件会越来越大,如何避免产生大的日志文件?
~~~ 其实Apache有相关的配置,使用日志按照我们的需求进行归档,
~~~ 比如每天一个新日志,或者每小时一个新的日志
### --- 首先简单设置日志的路径名称 #Apache最重要的访问日志access,
### --- 错误日志error是进行排错的
~~~ #编辑添加如下内容:
ErrorLog "logs/error.log"
CustomLog "Logs/access.log" combined // combined标签,名称;指定一下日志的格式
~~~ #指定了日志存放在/usr/local/apache2/logs目录下分别为error.log和access.log,
~~~ combined为日志显示的格式,日志格式可以参考配置文件httpd.conf中格式的指定,如下:
~~~ 设置Apache日志分割:利用ratatelogs这个工具来切割
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined #combined复杂版的日志
LogFormat "%h %l %u %t \"%r\" %>s %b common // common简化版的日志格式
### --- 同样编辑配置文件httpd.conf
~~~ #注意1:以上仅为两条命令(一条错误日志,一条访问日志,路径太长写不开
~~~ #注意2:若开启了https,则需要修改http-ssl.conf配置文件中的日志记录条目
[root@server11 ~]# vim /usr/local/apache2/etc/httpd.conf
#ErrorLog "logs/error_log"
ErrorLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/error_%Y%m%d.log 86400" #rotatelogs:Apache日志问题和日志切割命令。-L:标准UTC时区。error_%Y%m%d.log:日志命名时间,年月日,86400:日志更新时间;也就是每天一个新的日志。
#CustomLog "logs/access_log" common
CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/access_%Y%m%d.log 86400" common
### --- 验证:
[root@server11 ~]# apachectl -t
Syntax OK
[root@server11 ~]# apachectl restart
~~~ ErrorLOG是错误日志,CustomLog是访问日志,|就是管道符,
~~~ 意思是把产生的日志交给rotatelog这个工具,而这个工具就是Apache自带的切割日志的工具,
~~~ -l 的作用是校对准时区为UTC,也就是北京时间,86400,单位是秒,
~~~ 正好是一天,那么日志会每天切割一次,而最后面的combined为日志的格式,
~~~ 在httpd.conf中有意义。
[root@server11 ~]# ls /usr/local/apache2/logs/
access_log error_20210212.log error_log // 错误日志已经生效,带日志参数
~~~ 刷新一下Chrome的10.10.10.11地址的页面,就会显示正确日志
[root@server11 ~]# ls /usr/local/apache2/logs/
access_20210212.log access_log error_20210212.log error_log // 正确,错误日志都已经写入
二、不记录指定文件类型的日志
### --- 不记录指定文件类型的日志
~~~ 如果一个网站访问量特别大,那么访问日志就会很多,但有一些访问日志其实是可以忽略掉的,
~~~ 比如网站的一些图片,还有js、css等静态对象,而这些文件的访问往往是巨大的,
~~~ 而且即使记录这些日志也没有什么用,那么如何忽略不记录这些日志呢?
### --- 配置日志不寄了图片的访问
~~~ 说明:在原来的访问日志配置基础上,增加了一些image-request的定义,
~~~ 比如把gif/jpg/bmp/swf/js/css等结尾的全标记为image-request,
~~~ 然后在配置日志后加一个标记env=!image-request,表示取反。
[root@server11 ~]# vim /usr/local/apache2/etc/httpd.conf
#相关配置为:利用request_URL来访问到是.gif或者其它加一个日志标签:image-request调用,!:表示不调用。
<Directory "/usr/local/apache2/htdocs">
SetEnvIf Request_URL "\.gif$" image-request
SetEnvIf Request_URL "\.ipg$" image-request
SetEnvIf Request_URL "\.png$" image-request
SetEnvIf Request_URL "\.bmp$" image-request
SetEnvIf Request_URL "\.swf$" image-request
SetEnvIf Request_URL "\.js$" image-request
SetEnvIf Request_URL "\.css$" image-request
CustomLog "|/usr/local ... _%Y%m%d.log 86400" combined env=!image-request
</Directory>
### --- 验证:访问图片会记录日志
~~~ 若是访问图片不记录日志;添加如下内容;就不记录
[root@server11 ~]# mv JavaBBS.jpg /usr/local/apache2/htdocs/ // 上传一个图片JavaBBS.jpg文件并放置在htdocs下
[root@server11 ~]# tailf /usr/local/apache2/logs/access_20210212.log // 监控一下日志
10.10.10.240 - - [12/Feb/2021:09:14:54 +0800] "GET /JavaBBS.jpg HTTP/1.1" 200 341431
http://10.10.10.11/JavaBBS.jpg // 访问图片会生成一条图片的日志记录,
### --- 验证:访问图片不记录日志
[root@server11 ~]# vim /usr/local/apache2/etc/httpd.conf
<Directory "/usr/local/apache2/htdocs">
SetEnvIf Request_URL "\.ipg$" image-request
</Directory>
<IfModule log_config_module>
CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/access_%Y%m%d.log 86400" common env=!image-request
</IfModule>
[root@server11 ~]# apachectl -t
Syntax OK
[root@server11 ~]# apachectl restart
[root@server11 ~]# tailf /usr/local/apache2/logs/access_20210212.log
http://10.10.10.11/JavaBBS.jpg // 访问图片不会生成日志记录
http://10.10.10.11/JavaBBS.jpg

三、Apache配置静态缓存
### --- Apache配置静态缓存
~~~ 所说的静态文件是指图片/js/css等文件,用户访问一个站点,
~~~ 其实大多数元素都是图片/js/css等,
~~~ 这些静态文件其实是会被客户端的浏览器缓存到本地电脑上的,
~~~ 目的就是为了下次再请求时不再去服务器上下载,这样就加快了速度,
~~~ 提高快乐用户体验,但这些静态文件总不能一直缓存,它总有一些时效性,
~~~ 那么就得设置这个过期时间
### --- 配置静态缓存
[root@server11 ~]# vim /usr/local/apache2/etc/httpd.conf
</Directory> // 在这个目录下添加
<IfModule mod_expires.c>
#此模块默认未开启,请手动启用
ExpiresActive on
ExpiresByType image/gif "access puls 1 days"
ExpiresByType image/jpeg "access plus 24 hours"
ExpiresByType image/png "access plus 25 hours"
ExpiresByType test/css "access plus 2 hours"
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>
LoadModule expires_module modules/mod_expires.so // 开启这个模块
### --- 上传JavaBBS.png图片并移动到htdocs目录下
[root@server11 ~]# apachectl -t
Syntax OK
[root@server11 ~]# apachectl restart
[root@server11 ~]# mv JavaBBS.png /usr/local/apache2/htdocs/
### --- 访问:http://10.10.10.11/JavaBBS.png
[root@server11 ~]# curl -x10.10.10.11:80 'http://10.10.10.11/JavaBBS.png' -I
HTTP/1.1 200 OK
Date: Fri, 12 Feb 2021 01:43:39 GMT
Server: Apache/2.4.7 (Unix) OpenSSL/1.0.2k-fips PHP/7.0.7
Last-Modified: Thu, 11 Feb 2021 09:52:42 GMT
ETag: "39cfc-5bb0c7b0cee80"
Accept-Ranges: bytes
Content-Length: 236796
Cache-Control: max-age=86400 // 显示有缓存;max最长时间一天,一天时间为86400秒
Expires: Sat, 13 Feb 2021 01:43:39 GMT
Content-Type: image/png
### --- 或者使用mod_headers模块实现,该模块默认启用 #静态页面缓存配置下面添加
[root@server11 ~]# vim /usr/local/apache2/etc/httpd.conf
<IfModule mod_headers.c>
# htm,html,txt类的文件缓存为一个小时
<filesmatch "\.(html|htm|txt)$">
header set cache-control "max-age=3600"
</filesmatch>
</IfModule>
[root@server11 ~]# apachectl -t
Syntax OK
[root@server11 ~]# apachectl restart
[root@server11 ~]# vim /usr/local/apache2/htdocs/abc.html // 添加一个新的页面
www.abc.com
### --- 验证:http://10.10.10.11/abc.html得到www.abc.com ;可以正常访问
[root@server11 ~]# curl -x10.10.10.11:80 'http://10.10.10.11/abc.html' -I
HTTP/1.1 200 OK
Date: Fri, 12 Feb 2021 01:50:49 GMT
Server: Apache/2.4.7 (Unix) OpenSSL/1.0.2k-fips PHP/7.0.7
Last-Modified: Fri, 12 Feb 2021 01:49:39 GMT
ETag: "c-5bb19d96298d8"
Accept-Ranges: bytes
Content-Length: 12
cache-control: max-age=3600 // 缓存时间为3600秒,缓存一个小时
Content-Type: text/html
#css,js,swf 类的文件缓存一个星期
<filesmatch "\.(css|js|swf)$">
header set cache-control "max-age=604800"
</filesmatch>
#jpg,gif,jpeg,png,ico,flv,pdf等文件缓存一年
<filesmatch "\.(ico|gif|jpg|jpeg|png|flv|pdf)$">
header set cache-control "max-age=29030400"
</filesmatch>
</IfModule>
### --- 说明:
~~~ 这里的时间单位可以days,hours甚至是min,两种不同的方法,
~~~ 上面使用的是mod_expires,而下面用的是mod_headers,要想使用这些模块,
~~~ 必须要事先已经支持,如何查看是否支持,使用命令
[root@server11 ~]# /usr/local/apache2/bin/apachectl -M
四、禁止解析PHP
### --- 禁止解析PHP
~~~ 某个目录下禁止解析PHP,这个很有作用,我们做网站安全的时候,这个用的很多,
~~~ 比如某些目录可以上传文件,为了避免上传的有木马,所以我们禁止这个目录下面的访问解析PHP
### --- 配置静止解析PHP
[root@server11 ~]# vim /usr/local/apache2/etc/httpd.conf // 在末尾添加如下内容
<Directory /usr/local/apache2/htdocs/data>
php_admin_flag engine off
<filesmatch "(.*)php">
Order deny,allow
Deny from all
</filesmatch>
</Directory>
[root@server11 ~]# mkdir /usr/local/apache2/htdocs/data
[root@server11 ~]# vim /usr/local/apache2/htdocs/data/x.php
<?php
echo "hello";
[root@server11 ~]# apachectl -t
Syntax OK
[root@server11 ~]# apachectl restart
### --- 验证:http://10.10.10.11/data/x.php
~~~ 没有权限;表示禁止解析配置成功
Forbidden
You don't have permission to access /data/x.php on this server.
### --- 注释刚才的配置信息再次访问
[root@server11 ~]# vim /usr/local/apache2/etc/httpd.conf
#<Directory /usr/local/apache2/htdocs/data>
# php_admin_flag engine off
# <filesmatch "(.*)php">
# Order deny,allow
# Deny from all
# </filesmatch>
#</Directory>
### --- 验证:http://10.10.10.11/data/x.php 可以正常访问得到hello
~~~ PHP解析不受限制,可以正常访问
[root@server11 ~]# apachectl -t
Syntax OK
[root@server11 ~]# apachectl restart
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
cdv007-network
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通