apache如何设置缓存
基本介绍
httpd是一个比较经典的web服务器,也就是静态资源服务器,主要用来服务于一些静态的文件,例如css,js,html等文件,所谓的静态文件,也就是不需要通过服务器进行运行的文件。
在使用静态服务器的时候,大部分的图片或者js文件或者css文件的变化一般都是比较少的,从而我们可以设置缓存时间,从而实现用户访问的加速,从而提高用户体验。
由于httpd程序发展的时间过长,采用的是动态共享模块,从而在使用的时候,需要加载相关的模块来进行使用,在使用httpd进行缓存的时候,可以使用header模块或者是expires模块。
在使用httpd的时候,生产环境一般使用的版本为2.2的版本,并且采用的mpm机制为worker模式,从而在进行编译的时候,指定worker模式。
编译httpd2.2
在编译的时候,可能出现依赖包错误,从而首先需要安装相关的依赖包,pcre,zlib,openssl,arp,arp-util,第一个是perl的扩展正则表达式,第二个是提供压缩的,也就是gzip和deflate压缩,第三个和第四个主要是提供httpd的可移植的运行环境。
当编译的时候,出现如下错误(不能使用外部的apr和apr-util,表示不能使用操作系统自带的rpm包,从而需要重新编译安装):
Configuring Apache Portable Runtime Utility library...
checking for APR-util... reconfig
configure: error: Cannot use an external APR with the bundled APR-util
需要首先安装apr和apr-util,这两个包在httpd2.2的源码中是自带的,从而不需要专门下载,如下所示:
[root@mogilenode1 httpd-2.2.34]# cd srclib/
[root@mogilenode1 srclib]# cd apr
[root@mogilenode1 apr]# ./configure --prefix=/usr/local/apr2 (prefix表示安装路径)
[root@mogilenode1 apr]# make && make install
[root@mogilenode1 apr]# ls -l /usr/local/apr2/ (表示安装成功)
total 16
drwxr-xr-x 2 root root 4096 Sep 7 16:37 bin
drwxr-xr-x 2 root root 4096 Sep 7 16:37 build-1
drwxr-xr-x 3 root root 4096 Sep 7 16:37 include
drwxr-xr-x 3 root root 4096 Sep 7 16:37 lib
安装apr-util如下:
[root@mogilenode1 srclib]# cd apr-util/
[root@mogilenode1 apr-util]# ./configure --prefix=/usr/local/apr-util2 --with-apr=/usr/local/apr2/ (apr-util依赖于apr,从而需要指定apr的安装路径)
[root@mogilenode1 apr-util]# make && make install
[root@mogilenode1 apr-util]# ls -l /usr/local/apr-util2/ (表示安装成功)
total 12
drwxr-xr-x 2 root root 4096 Sep 7 16:41 bin
drwxr-xr-x 3 root root 4096 Sep 7 16:41 include
drwxr-xr-x 4 root root 4096 Sep 7 16:41 lib
进行安装httpd:
[root@mogilenode1 httpd-2.2.34]# ls -l include/ap_release.h (修改如下的内容,httpd的版本号,主要目的是为了防止根据相应的版本查找漏洞进行攻击)
-rw-r--r-- 1 1001 1001 3074 Sep 7 08:08 include/ap_release.h
40 #define AP_SERVER_BASEVENDOR "KEL"
41 #define AP_SERVER_BASEPROJECT "KEL"
42 #define AP_SERVER_BASEPRODUCT "KEL"
43
44 #define AP_SERVER_MAJORVERSION_NUMBER 2
45 #define AP_SERVER_MINORVERSION_NUMBER 2
46 #define AP_SERVER_PATCHLEVEL_NUMBER 2
47 #define AP_SERVER_DEVBUILD_BOOLEAN 0
编译安装httpd:
[root@mogilenode1 httpd-2.2.34]# ./configure --prefix=/usr/local/apache2 --with-apr=/usr/local/apr2/ --with-apr-util=/usr/local/apr-util2/ --enable-ssl --enable-rewrite --enable-expires --enable-headers --enable-so --with-mpm=worker --enable-deflate(在其中prefix表示httpd的安装路径,然后是apr的路径和apr-util的路径,启用ssl,主要是可以使用https协议,开放443端口,启用重写功能,从而可以跳转,启用缓存控制,启用http头部信息,启用动态模块加载,指定mpm为worker模式,启用压缩功能)
[root@mogilenode1 httpd-2.2.34]# make && make install
[root@mogilenode1 bin]# /usr/local/apache2/bin/httpd (启动服务,表示apache安装成功)
httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.249.236 for ServerName
[root@mogilenode1 bin]# ps -ef|grep httpd
root 29185 1 0 16:59 ? 00:00:00 /usr/local/apache2/bin/httpd
daemon 29186 29185 0 16:59 ? 00:00:00 /usr/local/apache2/bin/httpd
daemon 29187 29185 0 16:59 ? 00:00:00 /usr/local/apache2/bin/httpd
daemon 29188 29185 0 16:59 ? 00:00:00 /usr/local/apache2/bin/httpd
daemon 29189 29185 0 16:59 ? 00:00:00 /usr/local/apache2/bin/httpd
查看httpd的版本
可以直接使用curl来进行查看httpd版本,如下所示:
在其中使用了tengine的进行比较,可以看到在Tengine里面,不会显示服务器的具体版本信息,并且,在我们自己的编译之中,连openssl的版本都显示出来了,从而暴露了太多的信息,从而可以编辑配置文件,从而来隐藏版本,如下:
[root@mogilenode1 conf]# ls -l /usr/local/apache2/conf/httpd.conf (编辑httpd的主配置文件,在其中取消以下的注视,从而开启httpd长连接并且可以隐藏httpd版本)
-rw-r--r-- 1 root root 13913 Sep 7 17:06 /usr/local/apache2/conf/httpd.conf
413 # Various default settings
414 Include conf/extra/httpd-default.conf
[root@mogilenode1 conf]# ls -l /usr/local/apache2/conf/extra/httpd-default.conf
-rw-r--r-- 1 root root 2344 Sep 7 16:56 /usr/local/apache2/conf/extra/httpd-default.conf
55 ServerTokens Prod
65 ServerSignature Off
上面的两步,一个是为了加载httpd-default.conf配置文件,修改的55行修改为Prod,主要是在httpd的响应头中无法看到web服务器的版本信息,而65行,主要是当出现404等错误的时候,不会显示服务器的IP地址等信息。
可以看到经过修改之后,响应的头部信息不会出现了服务器的具体信息,修改配置之后,需要重启httpd程序。
[root@mogilenode1 extra]# /usr/local/apache2/bin/httpd -k graceful (重新加载配置文件,不会中断httpd服务)
开启httpd缓存控制功能
在没有开启缓存控制功能的时候,查看缓存控制策略如下所示:
进行httpd的配置,使用expires模块,修改配置主配置文件httpd.conf,添加内容如下:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 12 month"
ExpiresByType text/html "access plus 3 month"
</IfModule>
以上的表示,当存在缓存模块的时候,那么这段配置就会生效,第一行表示启用缓存控制,第二行表示默认情况下都缓存一年,第三行表示根据MIME格式进行划分,以上表示如果类型为html,那么就缓存三个月。再次查看头部信息如下:
可以从上面看到已经设置了过期时间,而且是一年,也就是说使用的是默认设置,在http的头部信息Cache-Control和Expires字段中可以看到缓存的时间,在下面图中也可以看到缓存时间。
使用headers来进行设置缓存控制时间,如下配置(表示在头部信息中直接添加一个首部控制信息):
<IfModule mod_headers.c>
header set cache-control "max-age=36500"
</IfModule>
查看结果如下:
使用缓存的优缺点
在使用缓存的时候,优点就是主要是提高静态资源的访问速度,从而提高用户的性能,提高用户体验;减少在传输的时候占用的带宽,从而节省成本。
在使用缓存的时候,如果源文件的内容发生了改变,那么如何是好呢?一般的情况下可以使用修改文件的名称来更新缓存,另外也可以使用条件式请求首部,就是每次会向服务器发送一个请求,你修改了嘛?主要就是使用的etag这个扩展信息,每次进行比对。
当你在进行测试的时候,你会发现,只要文件内容发生了改变,那么就会变成新的内容,为什么呢?。。。你猜!!!!
最后抛出一个图,思索下,为啥!!!
公众号:
apache如何设置缓存的更多相关文章
- 如何在 apache 中设置缓存有效时间
今天学习了下如何在 apache 中设置缓存时间,记之以备忘. 在 http 报文头中,与缓存时间有关的两个字段是 Expires 以及 Cache-Control 中的 max-age,Expire ...
- 详解浏览器缓存机制与Apache设置缓存
一.详解浏览器缓存机制 对于,如何说明缓存机制,在网络上找到了两张图,个人认为思路是比较清晰的.总结时,上图. 这里需要注意的有两点: 1.Last-Modified.Etag是响应头里的数据 2.I ...
- 阿里云主机windows系统Apache启用浏览器缓存的方法
一群友使用卡卡网的网站速度诊断工具诊断网站速度时,发现有几个需要优化的地方,其中较为重要的是“启用浏览器缓存”.诊断结果显示,网站尚未启用浏览器缓存. 图一:浏览器缓存未启用 群友找我帮忙设置一下,据 ...
- Ehcache(04)——设置缓存的大小
http://haohaoxuexi.iteye.com/blog/2116749 设置缓存的大小 目录 1 CacheManager级别 2 Cache级别 3 大小衡量 4 ...
- ViewPager设置 缓存个数、页卡间距、数据更新
在使用ViewPager常用设置 1)mViewPager.setOffscreenPageLimit(2);//设置缓存view 的个数(实际有3个,缓存2个+正在显示的1个)2)mViewPage ...
- apache访问控制设置
apache访问控制设置 (2009-03-17 11:24:36) 转载▼ 标签: it 杂谈 Order allow,deny 默认情况下禁止所有客户机访问 Order deny,all ...
- c# .net core 设置缓存
1.开启ResponseCaching的缓存(ResponseCaching相当于老版本的OutPutCache): 在Startup.cs文件中设置: public void ConfigureSe ...
- 如何进行Apache虚拟机设置
摘要:虚拟机Apache设置很多用户都遇到过,具体如何进行虚拟机Apache设置?怎样才能让虚拟机Apache设置达到最简单,最优化?本文为您讲解. Apache虚拟机设置有两种方法: 基于主机名的虚 ...
- mysql系列三、mysql开启缓存、设置缓存大小、缓存过期机制
一.开启缓存 mysql 开启查询缓存可以有两种方法来开启一种是使用set命令来进行开启,另一种是直接修改my.ini文件来直接设置都是非常的简单的哦. 开启缓存,设置缓存大小,具体实施如下: 1.修 ...
随机推荐
- 如何使用MVP+Dagger2+RxJava+Retrofit开发(1)
概述 在2016年5,6月份开始在知乎上看到开发方法,那时候记得是看mvc,mvp,mvvm这三种开发模式区别,后面进一步了解到google在github上开源了使用这3种模式进行Android开发的 ...
- Maven的下载和安装
1. Maven作用: 管理项目和jar包 2. jdk环境要求: maven3.3+需要jdk1.7以上的版本 3. 下载地址: http://maven.apache.org/download.c ...
- C++STL(vector,map,set,list)成员函数整理
/ *最近ACM比赛,用到的时候忘记成员函数了,贼尴尬,给以后比赛做下准备 */ LIST: 构造函数 list<int> c0; //空链表 list<int> c1(3); ...
- Java设计模式学习笔记,二:工厂模式
工厂模式,主要实现了创建者和调用者的分离. 分类:1.简单工厂模式:2.工厂方法模式:3.抽象工厂模式. 核心:实例化对象时,用工厂方法代替new操作. 一.简单工厂模式 也叫静态工厂模式,工厂类中实 ...
- C++中加const与不加const的区别
“常量”与“只读变量”的区别. 常量肯定是只读的,例如5, "abc",等,肯定是只读的,因为常量是被编译器放在内存中的只读区域,当然也就不能够去修改它. “只读变量”则是在内存中 ...
- 1.three.js世界的4大要素
一.三大组件 在Three.js中,要渲染物体到网页中,我们需要3个组建:场景(scene).相机(camera)和渲染器(renderer).有了这三样东西,才能将物体渲染到网页中去. 记住关建语句 ...
- ionic3 app 退出应用程序
在ionic3 打包的app,如果要实现代码来控制应用程序的推出. 在android以下代码是可以的,但是在ios是不支持的.因为这不适用于ios app,因为苹果apple 不允许应用程序以编程的方 ...
- Fiddler模拟重发请求
在测试的过程中会碰到模拟请求的重发或者修改请求的参数进行请求模拟发送 一.Reissue Sequentially 模拟多次重发 1.启用后fiddler:PC端或手机端创建某条数据后,session ...
- Charles使用(一)
Charles使用(一) 1.什么是Charles Charles是在MAC下常用的网络封包截取工具,在做移动开发时,是为了调试与服务端的网络通信协议,常常需要截取网络包来分析.Charles是通 ...
- 来杯咖啡看Pecan
Pecan的介绍及安装 文章内容来自官方文档:http://pecan.readthedocs.io/en/latest/quick_start.html Pecan的介绍: Pecan是一个路由对 ...