Apache网页优化与防盗链
一.Apache网页优化的概述
1、Apache网页优化的概念
• 在企业中,部署Apache后只采用默认的配置参数,会引发网站很多问题,换言之默认配置是针对以前较低的服务器配置的,以前的配置已经不适用当今互联网时代
• 为了适应企业需求,就需要考虑如何提升Apache的性能与稳定性,这就是Apache优化的内容
2、Apache网页优化的内容
配置网页压缩功能
配置网页缓存
工作模式的选择与参数优化
配置隐藏版本号
配置防盗链
……
3、gzip介绍
3.1 配置Apache的网页压缩功能,是使用gzip压缩算法来对网页内容进行压缩后再传输到客户端浏览器
3.2 作用
• 降低了网络传输的字节数,加快网页加载的速度
• 节省流量,改善用户的浏览体验
• gzip与搜索引擎的抓取工具有着更好的关系
4、 Apache的压缩模块
4.1 .Apache实现网页压缩的功能模块包括
• mod_ gzip 模块
• mod_ deflate 模块
4.2 .Apache 1.x
没有内建网页压缩技术,但可使用第三方mod_ gzip 模块执行压缩
4.3 .Apache 2.x
在开发的时候,内建了mod_ deflate 这个模块,取代mod_gzip
4.4 .mod_ gzip 模块与mod_ deflate 模块
• 两者均使用gzip压缩算法,运作原理类似
• mod_ deflate压缩速度略快, 而mod_ gzip的压缩比略高
• mod_ gzip对服务器CPU的占用要高一-些
• 高流量的服务器,使用mod_ deflate可能会比mod gzip加载速度更快
5、 配置网页的缓存时间
通过mod_expire模块配置Apache,使网页能在客户端浏览器缓存一段时间,以避免重复请求
启用mod_expire模块后, 会自动生成页面头部信息中的Expires标签和Cache-Control标签,客户端浏览器根据标签决定下次访问是在本地机器的缓存中获取页面不需要向服务器再次发出请求,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的
6、配置Apache实现防盗链
防盗链是防止别人的网站代码里面盗用我们自己服务器上的图片、文件、视频等相关资源
如果别人盗用网站的这些静态资源,明显的是会增大服务器的带宽压力
作为网站的维护人员,要杜绝服务器的静态资源被其他网站盗用
二、网页压缩的操作步骤
1、检查是否安装mod_ deflate 模块
apachectl -t -D DUMP_MODULES | grep "deflate"
2、如果没有安装mod deflate 模块,重新编译安装Apache 添加mod deflate模块
systemctl stop httpd.service cd /usr/local/httpd/conf mv httpd.conf httpd.conf.bak yum -y install gcc gcc-c++ pcre pcre-devel zlib-devel cd /opt/httpd-2.4.29/ ./configure \ --prefix=/usr/local/httpd \ --enable-so \ --enable-rewrite \ --enable-charset-lite \ --enable-cgi \ --enable-deflate #加入mod deflate 模块 make && make install
3、配置 mod deflate 模块启用
vim /usr/local/httpd/conf/httpd.conf --51行--修改 注释52行 Listen 192.198.80.10:80 # Listen 80 --105行--取消注释 LoadModule deflate module modules/mod deflate.so #开启mod deflate 模块 --197行--取消注释,修改 ServerName www . clj. com: 80 --末行添加-- <IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript text/jpg text/png #代表对什么样的内容启用gzip压缩 DeflateCompressionLevel 9 #代表压缩级别,范围为1~9 SetOutputFilter DEFLATE #代表启用deflate 模块对本站点的输出进行gzip压缩 </IfModule>
4、检查安装情况,启动服务
apachect1 -t #验证配置文件的配置是否正确 apachectl_-t -D DUMP_ MODULES l grep "deflate" #检查 mod deflate 模块是否已安装 deflate module (shared) #已安装的正确结果 systemctl start httpd.service
5、测试 mod_deflate 压缩是否生效
cd /usr/local/httpd/htdocs 先将game.jpg文件传到/usr/local/httpd/htdocs目录下 vim index.html <html><body> <hl>It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works!It works !</h1> <img src="game. jpg"/></body></html>
三、实例操作:网页压缩
1、检查是否安装mod_ deflate 模块
[root@cm ~]# apachectl -t -D DUMP_MODULES |grep "deflate"
2、如果没有安装mod deflate 模块,重新编译安装Apache 添加mod deflate模块
2.1 关闭服务,然后对httpd文件进行备份后,安装相关程序
[root@cm ~]# systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:firewalld(1) [root@cm ~]# cd /usr/local/httpd/conf/ [root@cm conf]# ls extra httpd.conf httpd.conf.bak magic mime.types original [root@cm conf]# mv httpd.conf httpd.conf.bak1 [root@cm conf]# ls extra httpd.conf.bak httpd.conf.bak1 magic mime.types original [root@cm conf]# yum -y install gcc gcc-c++ pcre pcre-devel zlib-devel 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com 软件包 gcc-4.8.5-44.el7.x86_64 已安装并且是最新版本 软件包 gcc-c++-4.8.5-44.el7.x86_64 已安装并且是最新版本 软件包 pcre-8.32-17.el7.x86_64 已安装并且是最新版本 软件包 pcre-devel-8.32-17.el7.x86_64 已安装并且是最新版本
2.2 配置软件模块中添加 mod_deflate
模块
[root@cm conf]# cd /opt/httpd-2.4.29/ [root@cm httpd-2.4.29]# ls ABOUT_APACHE build CMakeLists.txt configure.in httpd.mak libhttpd.dep Makefile.win NWGNUmakefile server acinclude.m4 BuildAll.dsp config.layout docs httpd.spec libhttpd.dsp modules os srclib Apache-apr2.dsw BuildBin.dsp config.log emacs-style include libhttpd.mak modules.c README support Apache.dsw buildconf config.nice httpd INSTALL LICENSE modules.lo README.cmake test apache_probes.d buildmark.o config.status httpd.dep InstallBin.dsp Makefile modules.o README.platforms VERSIONING ap.d CHANGES configure httpd.dsp LAYOUT Makefile.in NOTICE ROADMAP [root@cm httpd-2.4.29]# [root@cm httpd-2.4.29]# ./configure \ > --prefix=/usr/local/httpd \ > --enable-so \ > --enable-rewrite \ > --enable-charset-lite \ > --enable-cgi \ > --enable-deflate
2.3重新编译安装
[root@cm httpd-2.4.29]# make -j2 && make install
3、配置mod_deflate 模块启用
4、检查安装情况,启动服务
[root@cm ~]# apachectl -t Syntax OK [root@cm ~]# apachectl -t -D DUMP_MODULES |grep "deflate" deflate_module (shared) [root@cm ~]# systemctl restart httpd.service
5、测试mod deflate 压缩是否生效
[root@cm ~]# cd /usr/local/httpd/htdocs/ [root@cm htdocs]# ls index.html meme.jpg [root@cm htdocs]# vim index.html <html><body><h1> It works! It works! It works! It works! It works! It works! It works! It works! It works! It works! It works! It works! It works! It works! It works! It works! It works! It works! It works! It works! It works! It works! It works! It works! It works! It works! It works! </h1> <img src = "meme.jpg"/> </body></html>
6、在/etc/hosts文件中加入映射
[root@cm htdocs]# vim /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.229.60 www.ly.com 192.168.229.60 www.weq.com
7、测试(在客户机win10以及本机上进行测试)
7.1 在本机上进行测试
7.2 在客户机win10上进行测试
7.2.1 因为主机设置/etc/hosts文件并进行了映射,那么客户机也要同样进行设置才能用IP地址和域名同时访问
7.2.2 使用域名访问并查看
7.2.3 使用IP地址访问并查看
四、网页缓存
通过mod_expire模块配置Apache,使网页能在客户端浏览器缓存一段时间,以避免重复请求。
启用mod_expire模块后,会自动生成页面头部信息中的Expires标签和Cache-Control标签,客户端浏览器根据标签决定下次访问是在本地机器的缓存中获取页面,不需要向服务器再次发出请求,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的。
1、.检查是否安装mod_expires 模块
apachectl -t -D DUMP_MODULES | grep "expires"
2、如果没有安装mod_expires 模块,重新编译安装Apache 添加mod_expires 模块
systemctl stop httpd.service cd /usr/local/httpd/conf mv httpd.conf httpd.conf.bak1 yum -y install gcc gcc-c++ pcre pcre-devel zlib-devel cd /opt/httpd-2.4.29/ ./configure \ --prefix=/usr/local/httpd \ --enable-so \ --enable-rewrite \ --enable-charset-lite \ --enable-cgi \ --enable-deflate \ --enable-expires #加入mod_ expires 模块 make && make install
3、.配置mod_expires模块启用
vim /usr/local/httpd/conf/httpd.conf #修改配置文件
----52行修改-----
Listen 192.168.80.77:80
----111行取消注释----
LoadModule expires_module modules/mod_expires.so
----199行取消注释并修改-----
ServerName www.clj.com:80
----末行添加-----
<IfModule mod_expires.c>
ExpiresActive On #打开网页缓存功能
ExpiresDefault "access plus 60 seconds" #设置缓存60秒
</IfModule>
4、检查安装情况,启动服务
apachectl -t #验证配置文件的配置是否正确 apachectl -t -D DUMP_MODULES | grep "expires" #检查mod_ deflate模块是否已安装 deflate_module (shared) #已安装的正确结果 systemctl start httpd.service
5、测试缓存是否生效
cat /usr/local/httpd/htdocs/index.html 方法一-: 在Linux系统中,打开火狐浏览器,右击点查看元素 选择网络--->选择HTML、WS、其他 访问http://192.168.80.10,双击200消息查看响应头中包含Expires项 方法二: 在Windows系统中依次安装Microsoft. NET4和fiddler 软件,打开fiddler 软件 选择inspectors --->选择Headers 浏览器访问http://192.168.229.60 ,双击200消息查看Expires 项
五、实例操作:网页缓存
1、检查是否安装mod_expires 模块
[root@cm ~]# apachectl -t -D DUMP_MODULES | grep "expires"
2、如果没有安装mod_expires 模块,重新编译安装Apache 添加mod_expires 模块
2.1 安装相关程序
[root@cm ~]# systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:firewalld(1) [root@cm ~]# cd /usr/local/httpd/conf/ [root@cm conf]# ls extra httpd.conf httpd.conf.bak httpd.conf.bak1 magic mime.types original [root@cm conf]# mv httpd.conf httpd.conf.bak2 [root@cm conf]# ls extra httpd.conf.bak httpd.conf.bak1 httpd.conf.bak2 magic mime.types original [root@cm conf]# yum -y install gcc gcc-c++ pcre pcre-devel zlib-devel 已加载插件:fastestmirror, langpacks base | 3.6 kB 00:00:00 extras | 2.9 kB 00:00:00 updates | 2.9 kB 00:00:00 Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com 软件包 gcc-4.8.5-44.el7.x86_64 已安装并且是最新版本 软件包 gcc-c++-4.8.5-44.el7.x86_64 已安装并且是最新版本 软件包 pcre-8.32-17.el7.x86_64 已安装并且是最新版本 软件包 pcre-devel-8.32-17.el7.x86_64 已安装并且是最新版本 软件包 zlib-devel-1.2.7-19.el7_9.x86_64 已安装并且是最新版本 无须任何处理
2.2 加载模块并添加mod_expires 模块
[root@cm ~]# cd /opt/httpd-2.4.29/ [root@cm httpd-2.4.29]# cd /opt/httpd-2.4.29/ [root@cm httpd-2.4.29]# ./configure \ > --prefix=/usr/local/httpd \ > --enable-so \ > --enable-rewrite \ > --enable-charset-lite \ > --enable-cgi \ > --enable-deflate \ > --enable-expires
2.3 重新编译安装
[root@cm httpd-2.4.29]# make -j2 && make install
3、配置mod_expires模块启用
[root@cm ~]# cd /usr/local/httpd/conf/ [root@cm conf]# ls extra httpd.conf httpd.conf.bak httpd.conf.bak1 httpd.conf.bak2 magic mime.types original [root@cm conf]# vim httpd.conf
4、检查安装情况,启动服务
[root@cm conf]# apachectl -t Syntax OK [root@cm conf]# apachectl -t -D DUMP_MODULES | grep "deflate" deflate_module (shared) [root@cm conf]# systemctl restart httpd.service
5、测试mod deflate 压缩是否生效(因为上个实验网页已经设置好,直接进入浏览器测试即可)
5.1 在本机上进行测试
5.2 在客户机win10 上进行测试
六、Apache安全优化——隐藏版本信息
Apache的版本信息,透露了一定的漏洞信息,从而给网站带来安全隐患生产环境中要配置Apache隐藏版本信息
1、隐藏版本信息的操作步骤
vim /usr/local/httpd/conf/httpd.conf #修改此文件,修改内容如下 ------491行--取消注释------ Include conf/extra/httpd-default.conf vim /usr/local/httpd/conf/extra/httpd-default.conf #修改此文件,修改内容如下 ------55行--修改------ ServerTokens Prod #将原本的 Full 改为 Prod,只显示名称,没有版本 #ServerTokens 表示 Server 回送给客户端的响应头域是否包含关于服务器 OS 类型和编译过的模块描述信息 systemctl restart httpd.service #重新启动服务
2、实例操作:隐藏版本信息
2.1 修改配置文件并重启服务
2.2 测试是否隐藏版本信息
2.2.1 本机测试
隐藏前
隐藏后
2.2.2 客户机win10进行测试
隐藏前
隐藏后
七、Apache安全优化——配置防盗链的操作步骤
-
防盗链是防止别人的网站代码里面盗用我们自己服务器上的图片、文件、视频等相关资源
-
如果别人盗用网站的这些静态资源,明显的是会增大服务器的带宽压力
-
作为网站的维护人员,要杜绝服务器的静态资源被其他网站盗用
1、检查是否安装 mod rewrite 模块
apachectl -t -D DUMP_MODULES | grep "rewrite"
2、如果没有安装mod_rewrite 模块,重新编译安装 Apache 添加 mod_rewrite模块
systemctl stop httpd.service #停止服务 cd /usr/local/httpd/conf/ #切换目录 mv httpd.conf httpd.conf.bak3 #文件备份 yum install -y gcc gcc-c++ pcre pcre-devel zlib-devel #安装相关程序 cd /opt/httpd-2.4.29/ #切换目录 #添加 mod rewrite模块 ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-deflate --enable-expires --enable-rewrite make -j4 && make install #重新编译安装
3、配置 mod_rewrite 模块启用
vim /usr/local/httpd/conf/httpd.conf --157行--取消注释 LoadModule rewrite_module modules/mod_rewrite.so --224行-- <Directory "/usr/local/httpd/htdocs"> Options Indexes FollowSymLinks AllowOverride None Require all granted Rewri teEngine On #打开rewrite功能,加入mode_ rewrite模块内容 RewriteCond %{HTTP_REFERER} !^http://ly.com/。*$ [NC] #设置匹配规则 RewriteCond %{HTTP_REFERER} !^http://ly. com$ [NC] RewriteCond %{HTTP_REFERER} !^http://www.ly.com/.*$ [NC] RewriteCond %{HTTP_REFERER} ! ^http://www.ly.com/$ [NC] RewriteRule .*\.(gif | jpg | swf)$ http://www.ly.com/error.png #设置跳转动作 </Directory>
RewriteCond %{HTTP REFERER}!^http;//www.clj.com.s【NC】 的字段含义∶ "%{HTTP
REFERER}"∶ 存放一个链接的 URL,表示从哪个链接访问所需的网页。 "!^∶ 表示不以后面的字符串开头。
"http;//www.clj.com"∶ 是本网站的路径,按整个字符串匹配。 .$"∶ 表示以任意字符结尾。 "【NC】 "∶
表示不区分大小写字母。
RewriteRule ..(gifljpg|swf)$ http;//www.clj.com/error.png的字段含义∶
". "∶表示匹配一个字符。
"“∶ 表示匹配 0 到多个字符,与”.“合起来的意思是匹配 0 到多次前面的任意字符,如果是 1 到多次匹配可以用”+“表示。
“.“∶ 在这里的”“是转义符,”.“就代表符号”.“的意思。因为”.“在指令中是属于规则字符,有相应的含义,如果需要匹配, 需要在前面加个转义符””,其它规则字符如果需要匹配, 也做同样处理。
“(gifljpglswf)“∶ 表示匹配"gif”、“jpg”、“swf"任意一个,”$“表示结束。最后的规则是以”.gif”、”.jpg"、".swf"结尾,前面是1到多个字符的字符串,也就是匹配图片类型的文件。
"http∶/www.clj.com/error,pnq"∶ 表示转发到这个路径 。
Options Indexes FollowSymLinks AllowOverride None Require all granted RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://ly.com/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://ly.com$ [NC] RewriteCond %{HTTP_REFERER} !^http://www.ly.com/.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://www.ly.com/$ [NC] RewriteRule .*\.(gif|jpg|swf)$ http://www.ly.com/error.png
4、网页准备
4.1 Web源主机配置∶
cd /usr/local/httpd/htdocs 将1.jpg、2.jpg、3.png文件传到/usr/local/httpd/htdocs目录下 vim index.html <html><body><h1>this is clj.com!</hl> <img src="1.jpg"/> </body></html> echo "192.168.229.60 www.ly.com">> /etc/hosts echo "192.168.229.90 www.weq.com" >>/etc/hosts
4.2 盗链网站主机∶
yum install -y httpd cd /usr/local/httpd/htdocs #yum安装的httpd服务的默认路径为/var/www/html/ vim index.html <html><body><h1>this is benet.com!</h1> <img src="http;//www.clj.com/1.jpg"/> </body></html> echo "192.168.229.60 www.ly.com">> /etc/hosts echo "192.168.229.90 www.weq.com" >>/etc/hosts
在盗图网站主机上进行浏览器验证 http:www.weq.com 或者192.168.229.90
八、实例操作:Apache安全优化——配置防盗链
1、检查是否安装 mod rewrite 模块
[root@cm conf]# apachectl -t -D DUMP_MODULES | grep " rewrite"
2、如果没有安装mod_rewrite 模块,重新编译安装 Apache 添加 mod rewrite模块
2.1 停止服务,然后备份文件,进行yum安装程序
[root@cm conf]# systemctl stop httpd.service [root@cm conf]# cd /usr/local/httpd/conf [root@cm conf]# ls extra httpd.conf httpd.conf.bak httpd.conf.bak1 httpd.conf.bak2 magic mime.types original [root@cm conf]# mv httpd.conf httpd.conf.bak3 [root@cm conf]# ls extra httpd.conf.bak httpd.conf.bak1 httpd.conf.bak2 httpd.conf.bak3 magic mime.types original [root@cm conf]# yum -y install gcc gcc-c++ pcre pcre-devel zlib-devel 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com 软件包 gcc-4.8.5-44.el7.x86_64 已安装并且是最新版本 软件包 gcc-c++-4.8.5-44.el7.x86_64 已安装并且是最新版本 软件包 pcre-8.32-17.el7.x86_64 已安装并且是最新版本 软件包 pcre-devel-8.32-17.el7.x86_64 已安装并且是最新版本 软件包 zlib-devel-1.2.7-19.el7_9.x86_64 已安装并且是最新版本 无须任何处理
2.2 添加 mod rewrite模块
[root@cm conf]# cd /opt/httpd-2.4.29/ [root@cm httpd-2.4.29]# ls ABOUT_APACHE build CMakeLists.txt configure.in httpd.mak libhttpd.dep Makefile.win NWGNUmakefile server acinclude.m4 BuildAll.dsp config.layout docs httpd.spec libhttpd.dsp modules os srclib Apache-apr2.dsw BuildBin.dsp config.log emacs-style include libhttpd.mak modules.c README support Apache.dsw buildconf config.nice httpd INSTALL LICENSE modules.lo README.cmake test apache_probes.d buildmark.o config.status httpd.dep InstallBin.dsp Makefile modules.o README.platforms VERSIONING ap.d CHANGES configure httpd.dsp LAYOUT Makefile.in NOTICE ROADMAP [root@cm httpd-2.4.29]# ./configure \ > --prefix=/usr/local/httpd \ > --enable-so \ > --enable-rewrite \ > --enable-charset-lite \ > --enable-cgi \ > --enable-deflate \ > --enable-expires
2.3 重新编译安装
[root@cm httpd-2.4.29]# make -j2 && make install
3、配置 mod_rewrite 模块启用
下面内容为正确内容
4、盗链测试
4.1 在源主机上配置
[root@cm httpd-2.4.29]# cd /usr/local/httpd/htdocs/ [root@cm htdocs]# ls index.html meme.jpg [root@cm htdocs]# rz -E rz waiting to receive. [root@cm htdocs]# ls error.png index.html meme.jpg [root@cm htdocs]# vim /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.229.60 www.ly.com 192.168.229.90 www.weq.com
4.2 在盗链主机上配置httpd相关配置并创建网页文件以及域名解析
4.3 在盗链主机上访问源主机网站地址