基本介绍

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如何设置缓存的更多相关文章

  1. 如何在 apache 中设置缓存有效时间

    今天学习了下如何在 apache 中设置缓存时间,记之以备忘. 在 http 报文头中,与缓存时间有关的两个字段是 Expires 以及 Cache-Control 中的 max-age,Expire ...

  2. 详解浏览器缓存机制与Apache设置缓存

    一.详解浏览器缓存机制 对于,如何说明缓存机制,在网络上找到了两张图,个人认为思路是比较清晰的.总结时,上图. 这里需要注意的有两点: 1.Last-Modified.Etag是响应头里的数据 2.I ...

  3. 阿里云主机windows系统Apache启用浏览器缓存的方法

    一群友使用卡卡网的网站速度诊断工具诊断网站速度时,发现有几个需要优化的地方,其中较为重要的是“启用浏览器缓存”.诊断结果显示,网站尚未启用浏览器缓存. 图一:浏览器缓存未启用 群友找我帮忙设置一下,据 ...

  4. Ehcache(04)——设置缓存的大小

    http://haohaoxuexi.iteye.com/blog/2116749 设置缓存的大小 目录 1     CacheManager级别 2     Cache级别 3     大小衡量 4 ...

  5. ViewPager设置 缓存个数、页卡间距、数据更新

    在使用ViewPager常用设置 1)mViewPager.setOffscreenPageLimit(2);//设置缓存view 的个数(实际有3个,缓存2个+正在显示的1个)2)mViewPage ...

  6. apache访问控制设置

    apache访问控制设置 (2009-03-17 11:24:36) 转载▼ 标签: it 杂谈   Order allow,deny    默认情况下禁止所有客户机访问 Order deny,all ...

  7. c# .net core 设置缓存

    1.开启ResponseCaching的缓存(ResponseCaching相当于老版本的OutPutCache): 在Startup.cs文件中设置: public void ConfigureSe ...

  8. 如何进行Apache虚拟机设置

    摘要:虚拟机Apache设置很多用户都遇到过,具体如何进行虚拟机Apache设置?怎样才能让虚拟机Apache设置达到最简单,最优化?本文为您讲解. Apache虚拟机设置有两种方法: 基于主机名的虚 ...

  9. mysql系列三、mysql开启缓存、设置缓存大小、缓存过期机制

    一.开启缓存 mysql 开启查询缓存可以有两种方法来开启一种是使用set命令来进行开启,另一种是直接修改my.ini文件来直接设置都是非常的简单的哦. 开启缓存,设置缓存大小,具体实施如下: 1.修 ...

随机推荐

  1. Linux(3)用户和权限管理

    用户, 权限管理 Linux中root账号通常用于系统的维护和管理, 它对操作系统的所有部分具有不受限制的访问权限 在Unix/Linux安装过程中, 系统会自动创建许多用户账号, 而这些默认的用户就 ...

  2. 最大流当前弧优化Dinic模板

    最大流模板: 普通最大流 无向图限制:将无向图的边拆成2条方向相反的边 无源汇点有最小流限制的最大流:理解为水管流量形成循环,每根水管有流量限制,并且流入量等于流出量 有源汇点的最小流限制的最大流 顶 ...

  3. 29. leetcode 167. Two Sum II - Input array is sorted

    167. Two Sum II - Input array is sorted Given an array of integers that is already sorted in ascendi ...

  4. 深入理解Spring MVC 思想

    目录  一.前言二.spring mvc 核心类与接口三.spring mvc 核心流程图 四.spring mvc DispatcherServlet说明 五.spring mvc 父子上下文的说明 ...

  5. CentOS6 安装Sendmail + Dovecot + Squirrelmail

    本文记录在本地虚拟机CentOS6上搭建Sendmail + Dovecot + Squirrelmail 的Webmail环境的过程,仅仅是本地局域网的环境测试,不配置DNS, 也没有安全认证,Sq ...

  6. hadoop生态圈列式存储系统--kudu

    介绍 Kudu 是一个针对 Apache Hadoop 平台而开发的列式存储管理器.Kudu 共享 Hadoop 生态系统应用的常见技术特性: 它在 commodity hardware(商品硬件)上 ...

  7. Linux操作系统-命令-aptitude install unzip

    如果linux系统没有自带unzip,请执行aptitude install unzip以安装. 使用到这条Linux命令的场景是: 当我把Jmeter的压缩包(xxx.zip)拷贝到远程的Linux ...

  8. Oracle Test 日志

    这是一个在本地写日志的软件,写一篇看看效果怎么样. 我主要想看看这个行间距ok不... 看看效果...

  9. JS非空验证及邮箱验证

    非空验证 <body> <table> <tr> <td>姓名:</td> <td><input type="t ...

  10. ThinkPHP搭建商城一,环境部署

    一:配置虚拟主机 我使用的是Mac笔记本,所以以mac为例 1,首先找到Apache虚拟主机配置目录etc/apache2/extra/httpd-vhosts.conf或者private/etc/a ...