设为首页 收藏本站
查看: 1380|回复: 0

[经验分享] apache如何设置缓存

[复制链接]

尚未签到

发表于 2017-12-24 09:00:31 | 显示全部楼层 |阅读模式
基本介绍
  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的源码中是自带的,从而不需要专门下载,如下所示:
[iyunv@mogilenode1 httpd-2.2.34]# cd srclib/

[iyunv@mogilenode1 srclib]# cd apr

[iyunv@mogilenode1 apr]# ./configure --prefix=/usr/local/apr2 (prefix表示安装路径)

[iyunv@mogilenode1 apr]# make && make install

[iyunv@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如下:
[iyunv@mogilenode1 srclib]# cd apr-util/

[iyunv@mogilenode1 apr-util]# ./configure --prefix=/usr/local/apr-util2 --with-apr=/usr/local/apr2/ (apr-util依赖于apr,从而需要指定apr的安装路径)

[iyunv@mogilenode1 apr-util]# make && make install

[iyunv@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:
[iyunv@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:
[iyunv@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模式,启用压缩功能)

[iyunv@mogilenode1 httpd-2.2.34]# make && make install

[iyunv@mogilenode1 bin]# /usr/local/apache2/bin/httpd (启动服务,表示apache安装成功)


  httpd: Could not>
[iyunv@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版本,如下所示:
DSC0000.png

DSC0001.jpg

  在其中使用了tengine的进行比较,可以看到在Tengine里面,不会显示服务器的具体版本信息,并且,在我们自己的编译之中,连openssl的版本都显示出来了,从而暴露了太多的信息,从而可以编辑配置文件,从而来隐藏版本,如下:
[iyunv@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
[iyunv@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地址等信息。
DSC0002.jpg

  可以看到经过修改之后,响应的头部信息不会出现了服务器的具体信息,修改配置之后,需要重启httpd程序。
[iyunv@mogilenode1 extra]# /usr/local/apache2/bin/httpd -k graceful (重新加载配置文件,不会中断httpd服务)

开启httpd缓存控制功能
  在没有开启缓存控制功能的时候,查看缓存控制策略如下所示:
DSC0003.jpg

DSC0004.jpg

  进行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,那么就缓存三个月。再次查看头部信息如下:
DSC0005.jpg

DSC0006.png

DSC0007.jpg

  可以从上面看到已经设置了过期时间,而且是一年,也就是说使用的是默认设置,在http的头部信息Cache-Control和Expires字段中可以看到缓存的时间,在下面图中也可以看到缓存时间。
  使用headers来进行设置缓存控制时间,如下配置(表示在头部信息中直接添加一个首部控制信息):
  <IfModule mod_headers.c>
  header set cache-control "max-age=36500"
  </IfModule>
  查看结果如下:
DSC0008.jpg DSC0009.png

   DSC00010.png
使用缓存的优缺点
  在使用缓存的时候,优点就是主要是提高静态资源的访问速度,从而提高用户的性能,提高用户体验;减少在传输的时候占用的带宽,从而节省成本
  在使用缓存的时候,如果源文件的内容发生了改变,那么如何是好呢?一般的情况下可以使用修改文件的名称来更新缓存,另外也可以使用条件式请求首部,就是每次会向服务器发送一个请求,你修改了嘛?主要就是使用的etag这个扩展信息,每次进行比对。
  当你在进行测试的时候,你会发现,只要文件内容发生了改变,那么就会变成新的内容,为什么呢?。。。你猜!!!!
  最后抛出一个图,思索下,为啥!!!
DSC00011.jpg

  公众号:
DSC00012.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-427448-1-1.html 上篇帖子: unkow jdbc driver : http://maven.apache.org 下篇帖子: Apache Rewrite(大小写)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表