LAMP架构应用实战—Apache服务mod_expires模块介绍
LAMP架构应用实战—Apache服务
mod_expires缓存模块介绍
一:mod_expires模块介绍
此模块是允许通过Apache配置文件控制HTTP的“expires”和“cache-control”头的内容,用于控制服务器应答时的“expires”头的内容和“cache-control”头的max-age的指令,这个有效期可以设置为对于源文件最后的修改时间或客户端访问的时间
这些HTTP头向客户端表明了内容有效性与持久性,如果客户端本地有缓存,则用户再次访问时读取的内容就是从缓存里读取的(缓存没有失效的情况下),而不是从服务器端读取到的,客户端还会检查缓存中的内容,看看是不是需要从服务器端进行更新,从而增加用户的体验度,减少服务器的压力,实际生产环境中也是调优参数之一
二:检查与安装模块
直接编译安装查看如下
[root@Centos modules]# /application/apache/bin/apachectl -l|grep mod_expi
mod_expires.c
以DSO方式编译安装查看如下
[root@Centos ~]# ll /application/apache/modules/|grep expir
-rwxr-xr-x. 1 root root 37799 Sep 12 03:30 mod_expires.so
但是以上两种方式不能同时安装,否则会出现错误
查看帮助
[root@Centos httpd-2.4.23]# ./configure --help |grep expir
--enable-expires Expires header control
具体编译命令如下
[root@Centos httpd-2.4.23]# ./configure
--enable-expires
以DSO的方式编译安装如下
cd /Downloads/tools/httpd2.2.24/modules/metadata/
/application/apache/bin/apxs -c -i -a mod_expires.c
参数说明
-a 此选项会自动增加一个LoadModule行到httpd.conf文件中,来激活模块,如果此行已存在,则启用
-c 此选项表示需要执行编译操作
-i 此选项表示需要执行安装操作,以安装一个或多个动态共享对象到服务器modules目录中
[root@Centos modules]# cd /Downloads/tools/httpd-2.4.23/modules/metadata/
[root@Centos metadata]# /application/apache/bin/apxs -a -c -i mod_expires.c
处程省略
----------------------------------------------------------------------
chmod 755 /application/apache2.4.23/modules/mod_expires.so
[activating module `expires' in /application/apache2.4.23/conf/httpd.conf]
三:配置mod_expires模块
1、查看当前的 http headers信息
[root@Centos ~]# curl -I http://blog.abc.com:9999/
HTTP/1.1 200 OK
Date: Sun, 18 Sep 2016 03:40:44 GMT
Server: Apache/2.4.23 (Unix)
Last-Modified: Fri, 09 Sep 2016 12:19:55 GMT
ETag: "1f-53c122a061992"
Accept-Ranges: bytes
Content-Length: 31
Content-Type: text/html
2、配置模块
模块配置有两种模式:主配置里面配置与单个虚拟主机配置文件里配置
配置HTTP主配置文件如下
[root@Centos conf]# ls
extra httpd.conf httpd.conf.bak index.html magic mime.types original
[root@Centos conf]# cp httpd.conf httpd.conf.2016-09-09
[root@Centos conf]# vi httpd.conf
前面的内容省略
<Directory "/data/www/bbs">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<Directory "/data/www/blog">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ExpiresActive on
ExpiresDefault "access plus 12 month"
ExpiresByType text/css "access plus 12 month"
ExpiresByType image/gif "access plus 12 month"
ExpiresByType image/jpge "access plus 12 month"
ExpiresByType image/jpg "access plus 12 month"
ExpiresByType image/png "access plus 12 month"
ExpiresByType application/x-shockwave-flash "access plus 12 month"
ExpiresByType application/x-javascript "access plus 12 month"
ExpiresByType video/x-flv "access plus 12 month"
"httpd.conf" 513L, 18662C written
检查语法并重启服务
[root@Centos conf]# /application/apache/bin/apachectl -t
Syntax OK
[root@Centos conf]# /application/apache/bin/apachectl graceful
检查进程与端口
[root@Centos conf]# ps -ef|grep http
root 1717 1 0 09:45 ? 00:00:00 /application/apache2.4.23/bin/httpd -k start
daemon 5319 1717 0 12:13 ? 00:00:00 /application/apache2.4.23/bin/httpd -k start
daemon 5320 1717 0 12:13 ? 00:00:00 /application/apache2.4.23/bin/httpd -k start
daemon 5321 1717 0 12:13 ? 00:00:00 /application/apache2.4.23/bin/httpd -k start
root 5404 5022 0 12:13 pts/0 00:00:00 grep http
[root@Centos conf]# lsof -i tcp:9999
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 1717 root 8u IPv6 14448 0t0 TCP *:distinct (LISTEN)
httpd 5319 daemon 8u IPv6 14448 0t0 TCP *:distinct (LISTEN)
httpd 5320 daemon 8u IPv6 14448 0t0 TCP *:distinct (LISTEN)
httpd 5321 daemon 8u IPv6 14448 0t0 TCP *:distinct (LISTEN)
[root@Centos conf]# lsof -i tcp:8888
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 1717 root 6u IPv6 14444 0t0 TCP *:ddi-tcp-1 (LISTEN)
httpd 5319 daemon 6u IPv6 14444 0t0 TCP *:ddi-tcp-1 (LISTEN)
httpd 5320 daemon 6u IPv6 14444 0t0 TCP *:ddi-tcp-1 (LISTEN)
httpd 5321 daemon 6u IPv6 14444 0t0 TCP *:ddi-tcp-1 (LISTEN)
上传一张图片到站点目录
[root@Centos blog]# rz
rz waiting to receive.
Starting zmodem transfer. Press Ctrl+C to cancel.
Transferring 20160918093614.jpg...
100% 49 KB 49 KB/s 00:00:01 0 Errors
[root@Centos blog]# ll
total 56
-rw-r--r--. 1 root root 50657 Sep 18 09:36 20160918093614.jpg
-rw-r--r--. 1 root root 31 Sep 9 20:19 index.html
本地客户端浏览器访问
http://blog.abc.com:9999/20160918093614.jpg
可以正常显示上传的图片信息
[root@Centos blog]# curl -I http://blog.abc.com:9999
HTTP/1.1 200 OK
Date: Sun, 18 Sep 2016 04:21:24 GMT
Server: Apache/2.4.23 (Unix)
Last-Modified: Fri, 09 Sep 2016 12:19:55 GMT
ETag: "1f-53c122a061992"
Accept-Ranges: bytes
Content-Length: 31
Cache-Control: max-age=31104000
Expires: Wed, 13 Sep 2017 04:21:24 GMT
#发现没有,这就是缓存的时间期限
Content-Type: text/html
[root@Centos blog]# date
Sun Sep 18 12:21:36 CST 2016
说明如果配置HTTP主配置文件,则全局生效,虚拟主机配置文件则不需要配置
配置单个虚拟主机文件如下
#port bash name
<VirtualHost *:9999>
ServerAdmin admini@abc.com
DocumentRoot "/data/www/blog"
ServerName blog.abc.com
ServerAlias blog1.com
ErrorLog "logs/bbs-error_log"
CustomLog "logs/bbs-access_log" common
ExpiresActive on
ExpiresDefault "access plus 12 month"
ExpiresByType text/css "access plus 12 month"
ExpiresByType image/gif "access plus 12 month"
ExpiresByType image/jpge "access plus 12 month"
ExpiresByType image/jpg "access plus 12 month"
ExpiresByType image/png "access plus 12 month"
ExpiresByType application/x-shockwave-flash "access plus 12 month"
ExpiresByType application/x-javascript "access plus 12 month"
ExpiresByType video/x-flv "access plus 12 month"
"httpd-vhosts.conf" 50L, 1821C written
检查语法并重启服务
[root@Centos extra]# /application/apache/bin/apachectl -t
Syntax OK
[root@Centos extra]# /application/apache/bin/apachectl graceful
查看进程与端口
[root@Centos extra]# ps -ef |grep http
root 1717 1 0 09:45 ? 00:00:00 /application/apache2.4.23/bin/httpd -k start
daemon 5088 1717 0 11:52 ? 00:00:00 /application/apache2.4.23/bin/httpd -k start
daemon 5089 1717 0 11:52 ? 00:00:00 /application/apache2.4.23/bin/httpd -k start
daemon 5090 1717 0 11:52 ? 00:00:00 /application/apache2.4.23/bin/httpd -k start
root 5176 5022 0 11:53 pts/0 00:00:00 grep http
[root@Centos extra]# lsof -i tcp:9999
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 1717 root 8u IPv6 14448 0t0 TCP *:distinct (LISTEN)
httpd 5088 daemon 8u IPv6 14448 0t0 TCP *:distinct (LISTEN)
httpd 5089 daemon 8u IPv6 14448 0t0 TCP *:distinct (LISTEN)
httpd 5090 daemon 8u IPv6 14448 0t0 TCP *:distinct (LISTEN)
上传一张图片到站点目录
[root@Centos blog]# rz
rz waiting to receive.
Starting zmodem transfer. Press Ctrl+C to cancel.
Transferring 20160918093614.jpg...
100% 49 KB 49 KB/s 00:00:01 0 Errors
[root@Centos blog]# ll
total 56
-rw-r--r--. 1 root root 50657 Sep 18 09:36 20160918093614.jpg
-rw-r--r--. 1 root root 31 Sep 9 20:19 index.html
本地客户端浏览器访问
http://blog.abc.com:9999/20160918093614.jpg
可以正常显示上传的图片信息
查看缓存信息
[root@Centos blog]# curl -I http://blog.abc.com:9999
HTTP/1.1 200 OK
Date: Sun, 18 Sep 2016 04:01:36 GMT
Server: Apache/2.4.23 (Unix)
Last-Modified: Fri, 09 Sep 2016 12:19:55 GMT
ETag: "1f-53c122a061992"
Accept-Ranges: bytes
Content-Length: 31
Cache-Control: max-age=31104000
Expires: Wed, 13 Sep 2017 04:01:36 GMT
Content-Type: text/html
[root@Centos blog]# date
Sun Sep 18 12:02:20 CST 2016
初步计算应该是360天的样子,说明配置是正确的
[root@Centos extra]# curl -I https://www.baidu.com/img/bd_logo1.png
HTTP/1.1 200 OK
Server: bfe/1.0.8.18
Date: Sun, 18 Sep 2016 07:07:04 GMT
Content-Type: image/png
Content-Length: 7877
Connection: keep-alive
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Set-Cookie: BAIDUID=01FAEEFF2AF063514442EEC0D5D83A68:FG=1; expires=Mon, 18-Sep-17 07:07:04 GMT; max-age=31536000; path=/; domain=.baidu.com; version=1
Last-Modified: Wed, 03 Sep 2014 10:00:27 GMT
ETag: "1ec5-502264e2ae4c0"
Accept-Ranges: bytes
Cache-Control: max-age=315360000
Expires: Wed, 16 Sep 2026 07:07:04 GMT
百度的LOG图片缓存有效期约为十年,其它的有兴趣可以自己去看
四:mod_expires模块的优点
1、提升用户对访问网站的体验度
由于一些文件缓存在本地,访问速度提升了,用户体验也就相应的提升了
2、减少服务器带宽与负载压力
由于用户访问时是读取本地缓存的文件内容,减少了与服务器之间的交互,从而减轻服务器压力
3、节约维护服务器的成本
和上述一样,服务器压力小了,维护人员也会相应的减少,服务器配件配置更新的速度也会相应的慢下来
注:但是这个缓存也会有失效的时候就是用户主动清空浏览器缓存或者有效期过期
- 如何使用Airgeddon找回WiFi密码
- 设计缺陷将导致亚马逊Echo变身成为监听设备
- Unity引擎与C#脚本简介
- Redis分布式缓存系统Lua脚本食用指引
- 基于复杂方案OWSAP CsrfGuard的CSRF安全解决方案(适配nginx + DWR)
- XMLHttpRequest对象如何兼容各浏览器使用?
- Java使用wsdl生成axis版本webservice服务端/客户端代码
- Java微信支付快速入门&工具类
- redis集群 - linux安装与配置笔记
- Apache RocketMQ 4.0.0 - linux安装与配置笔记
- 数据库连接池-tomcat-jdbc食用笔记
- Java.NIO编程一览笔录
- Hbase 学习(三)Coprocessors
- Spring4+Spring MVC+MyBatis整合思路
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 搭建简易的物联网服务端和客户端-ECharts数据显示(七)
- 搭建简易的物联网服务端和客户端-整合(八)
- 搭建简易的物联网服务端和客户端-Maibu显示(九)
- 搭建简易的物联网服务端和客户端-DCloud手机端(十)
- 整理了一份 Docker系统知识,从安装到熟练操作看这篇就够
- 搭建简易的物联网服务端和客户端-第一次增补(十一)
- 搭建简易的物联网服务端和客户端-第二次增补(十二)
- 使用jest进行单元测试
- 搭建简易的物联网服务端和客户端-数据库功能增加(十三)
- 分享一个关于Cookie做的实验结果
- LeetCode20|从上到下打印二叉树
- 搭建简易的物联网服务端和客户端-微博接口(十四)
- 一键帮你生成所需代码--EasyCode试试这个工具吧
- centos7.2安装MySQL
- LeetCode19|二叉树的深度