Apache网页优化

一、网页压缩与缓存

注意文章中的http为源代码包安装,配置时指定了mod_deflate、mod_expires、mod_rewrite模块。所有的模块是否生效可以通过在浏览器中找到"开发工具"中的网络选项卡中的信息进行验证,里面有请求报文和响应报文的部分信息。

通过对网页资源进行压缩,之后再传输可以提升Apache应用程序的速度。有一个方法就是gzip。

1.1 网页压缩

1.1.1 HTTP的压缩过程

利用Apache中的gzip模块,可以使用gzip压缩算法对要发送的网页内容进行压缩后再传输到客户端的浏览器。需要注意的是客户端的浏览器是否支持HTTP压缩。若支持,则压缩的整体流程如下:

1.1.2 Apache的压缩模块

根据版本的不同,Apache的压缩模块分为两种,分别是1.x版本的mod_gzip模块和2.x版本的mod_defalte模块,其中mod_gzip是第三方的模块。mod_deflate的压缩速度略快且消耗资源较少,而mod_gzip的压缩比略高。

要开启压缩模块,需要在httpd的主配置文件中,找到"LoadModule deflate_module modules/mod_deflate.so"语句,取消它的注释,并在它的上面添加"LoadFile /usr/lib64/libz.so"。然后添加以下内容:

<IfModule mod_deflate.c>

DeflateCompressionLevel 6 #设置压缩比

SetOutputFilter DEFLATE #启用deflate模块对本网站的输出进行gzip压缩

AddOutputFilterByType DEFLATE text/html text/css text/xml text/javascript text/jpg text/png

#对文本的内容进行压缩,如text/html、text/css、text/xml。

<IfModule>

可从响应头中找到请求头"compression-Encoding"字段,找到gzip,表示使用gzip进行压缩。

1.2 网页缓存

网页缓存是将一些不会变动或者很少变动的页面缓存,方便下次访问,提高访问速度。Apache的mod_expires模块可以实现此功能。要启用此模块的方法为:

①在主配置文件中找到"LoadModule expires_module modules/mod_expires.so",去掉前面的注释。

②在文件中添加以下内容:

<IfModule mod_expires.c>

ExpiresActive On

ExpiresDefault "access plus 60 seconds" #设置缓存为60s

</IfModule>

③重启服务

在网页中访问自己设置的服务器,即可从响应头中找到"Expires"字段和"Data"字段。记录此次缓冲的有效期。

二、隐藏版本信息

通过隐藏Apache的版本信息,可以提高服务器的安全性,应为有些人可以通过版本信息知晓服务器的一些漏洞,从而进行攻击。

关于版本信息显示的控制选项在"httpd-default.conf"文件中,这个选项名为"ServerTokens",它支持的显示信息的详细程度:

以上这些选项就是可以设置的级别,默认为Full。注意此文件被包含在httpd的主配置文件中,需要找到并取消它的注释,此修改才会生效。可以通过查看开发工具中的响应头中的"Server"字段看到版本信息。可以在浏览器的开发工具中的响应头的Server字段中查看版本信息。

三、Apache防盗链

一般用户浏览一个完整的页面并不是一次性传输到客户端的,如果请求的页面中带有图片或其他信息,那么第一次会传输文本,客户端会再发送一次请求,传输图片或其他信息,由浏览器负责这些信息在页面上的位置。

基于这样的机制,就会产生盗链的问题,即一个网站A中可以使用一个链接,这个链接是其他服务器B上图片的链接,用户向A请求这个图片,进行解析的不是网站A,而是B,这就会消耗B的性能资源,加重了B的负担。

HTTP 标准协议中有专门的 Referer 字段记录,它的作用如下

  • 可以追溯上一个入站地址是什么。
  • 对于资源文件,可以跟踪到包含显示它的网页地址是什么,因此所有防盗链方法都是基于这个 Referer 字段。

3.1 配置防盗链

Apache防盗链需要安装mod_rewrite模块。mod_rewrite模块需要在httpd的主配置文件中启用才能生效(默认是生效语句被注释掉了)。再添加以下语句:

<Directory "/usr/local/httpd/htdocs"> #注意此文件路径为安装httpd的源码包指定的/usr/local/。

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^htttp://fkk.com/.*$ [NC]

RewriteCond %{HTTP_REFERER} !^http://fkk.com [NC]

RewriteCond %{HTTP_REFERER} !^http://www.fkk.com/.\*$ [NC]

RewriteCond %{HTTP_REFERER} !^http://www.fkk.com [NC]

RewriteCond .*\.(gif|jpg|swf)$ http://www.fkk.com/error.png

</Directory>

在上面以"RewriteCond"开头的前4句都是匹配用户请求的目标的网址是否为自己,如果为自己,就会返回正确的资源,不是的话若该次请求的资源中有图片则返回error.png图片。这些匹配规则写得越多,越精细,防护效果就越好。防盗链的匹配规则表为:

|-----------------|--------------------------------------|
| %{HTTP_REFERER} | 请求头中的链接字段,存放一个链接的URL,代表是从哪个链接访问所需的网页 |
| !^ | 不以后面的字符串开头 |
| .*$ | 以任意字符结尾 |
| NC | 不区分大小写 |
| R | 强制跳转 |
| ? | 匹配0到1个字符 |
| * | 匹配0到多个字符 |
| + | 匹配1到多个字符 |

相关推荐
程序猿小D1 天前
第25节 Node.js 断言测试
后端·node.js·log4j·编辑器·vim·apache·restful
RR13351 天前
图标统计页面的设计与控件 Apache echarts
前端·apache·echarts
tcoding2 天前
《基于Apache Flink的流处理》笔记
笔记·flink·apache
ALLSectorSorft3 天前
上门服务小程序会员系统框架设计
小程序·apache
杨过姑父3 天前
部署开源版禅道,修改apache端口无效解决
bug·apache·软件工程·issue
酷爱码3 天前
Spring Boot 整合 Apache Flink 的详细过程
spring boot·flink·apache
黑客老李4 天前
JavaSec | SpringAOP 链学习分析
java·运维·服务器·开发语言·学习·apache·memcached
临水逸4 天前
可视化大屏工具对比:GoView、DataRoom、积木JimuBI、Metabase、DataEase、Apache Superset 与 Grafana
apache·grafana
SelectDB技术团队4 天前
Apache Doris + MCP:Agent 时代的实时数据分析底座
人工智能·数据挖掘·数据分析·apache·mcp