网页压缩与缓存
网页压缩
网页的访问速度是由多个因素共同决定的,这些因素包括应用程序的响应速度、网络带宽、服务器性能、与客户端之间的网络传输速度等
其中最重要的一个因素是Apache本身的响应速度。因此要提升网站性能,第一个要着手处理的便尽可能的提升Apache的执行速度,可以使用网页压缩提升应用程序的速度。
配置网页压缩
-
添加mod_deflate模块
shell#添加模块 [root@localhost filters]# /usr/local/httpd/bin/apxs -i -c -a mod_deflate.c #检查模块是否添加成功
-
配置mod_deflate模块启用
在httpd.conf开启LoadModule deflate_module modules/mod_deflate.so配置项
shell#进入主配置文件 [root@localhost ~]# vim /usr/local/httpd/conf/httpd.conf #找到LoadModule deflate_module modules/mod_deflate.so该行取消前面的注释并在下方添加以下内容 <IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript text/jpg text/png #压缩的文件类型 DeflateCompressionLevel 9 #压缩级别 SetOutputFilter DEFLATE #是否启用压缩 </IfModule>
-
检查语法并重启Apache服务器
shell#检查语法并重启服务 [root@localhost ~]# httpd -t Syntax OK [root@localhost ~]# systemctl restart httpd
-
测试压缩是否生效
图片
网页缓存
网页缓存是将一部分经常不会改变和变动很少的页面缓存,下次浏览器再次访问这些页面是,不需要再次去下载这些页面。从而提高了用户的访问速度
Apache的mod_expires模块会自动生成页面又不信息中的Expires标签和Cache-Control标签,客户端浏览器根据标签决定下次访问是在本地机器的缓存中获取页面,不需要向服务器再次发出,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的
配置网页缓存
shell
#进入主配置文件
[root@localhost ~]# vim /usr/local/httpd/conf/httpd.conf
#在主配置文件中去掉LoadModule expires_module modules/mod_expires.so并添加以下内容
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "accesss plus 60 seconds"
</IfModule>
#重启服务
[root@localhost ~]# httpd -t
Syntax OK
[root@localhost ~]# systemctl restart httpd
隐藏版本信息
软件的漏洞信息和特定版本是相关的,因此软件版本号一般是需要隐藏的,可以减少受攻击的风险,保护服务器的安全运行
shell
#隐藏Apache信息
[root@localhost ~]# vim /usr/local/httpd/conf/httpd.conf
#去掉前面的注释
Include conf/extra/httpd-default.conf
[root@localhost ~]# vim /usr/local/httpd/conf/extra/httpd-default.conf
#更改服务器令牌
ServerTokens Prod
#重启服务
[root@localhost ~]# systemctl restart httpd
选项 | 输出格式 |
---|---|
Prod | Server:Apache |
Major | Server:Apache/2 |
Minor | Server:Apache/2.4 |
OS | Server:Apache/2.4.25(Unix) |
Full | Server:Apache/2.4.25(Unix)PHP/4.2.2 MyMod/1.2 |
Apache防盗链
一般来说,用户浏览一个完整的页面并不是一次性全部传送到客户端的。如果所请求的页面带有图片或其他信息,那么第一个HTTP请求传送的是这个页面的文本,然后通过客户端的浏览器对这段文本进行解释执行。如果发现其中还有图片,那么客户端的浏览器会再次发送一条HTTP请求,当这个请求被处理后这个图片文件才会被传送到客户端,最后浏览器会将图片安放到页面的正确位置,就这样一个完整的页面要经过多次发送HTTP请求才能够被完整的显示
基于这样的机制,就会产生盗链问题:如果一个网站中没有其页面中所说图片信息,那么它完全可以链接到其他网站的图片信息上。这样,没有任何资源的网站利用了其他网站的资源来展示给浏览者,提高了自己的访问量,而大部分浏览者又不会很容易地发现。一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接。一方面损害了原网站的合法利益,另一方面又加重了服务器的负担
HTTP标准协议中有专门的Referer字段记录,它的作用如下:
- 可以最速上一个入站地址是什么
- 对于资源文件,可以跟踪包含显示它的网页地址是什么,因此所有防盗链方法都是基于Referer字段
配置Apache
shell
#Apache防盗链
#将第一台服务器直接克隆一个,并修改IP地址为192.168.10.102
#修改两台服务器的主机名
#服务器1
[root@www ~]# hostnamectl set-hostname apache1
[root@www ~]# bash
#服务器2
[root@www ~]# hostnamectl set-hostname apache2
[root@www ~]# bash
#修改每个主机的hosts文件
192.168.10.101 www.benet.com
192.168.10.102 www.accp.com
#写带有图片的网页(原图网站)
将图片文logo.jpg件拷贝到apache的网站根目录下并修改网页文件
[root@apache1 ~]# vim /usr/local/httpd/htdocs/index.html
<html>
<body>
<h1>It work! </h1>
<img src="logo.jpg"/>
</body>
</html>
#用另一台apache服务器盗链(盗图网站)
#在 www.accp.com 服务器,修改 index.html 文件,加入盗取图片链接
[root@apache2 ~]# vim /usr/local/httpd/htdocs/index.html
<html>
<body>
<h1>dao lian </h1>
<img src="http://www.benet.com/logo.jpg" />
</body>
</html>
[root@apache1 ~]# vim /usr/local/httpd/conf/httpd.conf
#去掉前面的注释开启rewrite功能
LoadModule rewrite_module modules/mod_rewrite.so
<Directory "/usr/local/httpd/htdocs"> #找到该行 添加以下内容
AllowOverride None
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://benet.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://benet.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.benet.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.benet.com/$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.benet.com/error.png #检测到前方的匹配后重定向到error.png
Require all granted
</Directory>
#重启服务
[root@apache1 ~]# httpd -t
Syntax OK
[root@apache1 ~]# systemctl restart httpd
-
开启rewrite功能后,需要设置RewriteCond指令,它定义了匹配规则,如果符合某个或几个条件,则执行RewriteCond下面紧邻的RewriteRule指令。如果不匹配,则后面的规则不再匹配。
-
常用匹配规则如下:
规则 描述 %{HTTP_REFERER} 浏览header中的链接字段,存放一个链接的URL,代表是从那个链接访问所需的网页 ! 取反 .*$ 以任意字符结尾 NC 不区分大小写 R 强制跳转 ? 匹配0-1个字符 * 匹配0-n个字符 + 匹配1-n个字符 ^ 字符串开始标志 $ 字符串结束标志 . 匹配任何单字符