文章目录
一:Apache网页优化
- Apache网页优化概述
- 在企业中,部署Apache后只采用默认的配置参数,会引发网站很多问题,换言之默认配置是针对以前较低的服务器配置的,以前的配置已经不适用当今互联网时代。
- 为了适应企业需求,就需要考虑如何提升Apache的性能与稳定性,这就是Apache优化的内容
- 优化内容
- 配置网页压缩功能
- 配置网页缓存
- 工作模式的选择与参数优化
- 配置隐藏版本号
- 配置防盗链
1.1:网页压缩
1.1.1:gzip介绍
- 配置Apache的网页压缩功能,是使用gzip压缩算法来对网页内容进行压缩后再传到客户端浏览器
- 作用
- 降低了网络传输的字节数,加快网页加载的速度
- 节省流量,改善用户的浏览体验
- gzip与搜索引擎的抓取工具有着更好的关系
1.1.2:Apache的压缩模块
- 压缩模块概述
- Apache 1.x系列没有内建网页压缩技术,使用的是额外的第三方mod gzip模块来执行压缩。而Apache 2.x官方在开发的时候,就把网页压缩考虑进去,内建了mod deflate这个模块,用以取代mod-gzip,两者都是使用的gzip压缩算法,它们的运作原理是类似的。mod deflate压缩速度略快而mod gzip的压缩比略高。一般默认情况下, mod gzip会比mod deflate多出4%~6%的压缩量。
- 一般来说mod gzip对服务器CPU的占用要高一些。mod deflate是专门为确保服务器的性能而使用的一个压缩模块, moddeflate需要较少的资源来压缩文件。这意味着在高流量的服务器,使用mod deflate可能会比mod gzip加载速度更快。
- 简而言之,如果网站访问量较小,想要加快网页的加载速度,就使用mod gzip.虽然会额外耗费一些服务器资源,但也是值得的。如果网站访问量较大、使用的是共享虚拟主机.且所分配系统资源有限,那么使用mod deflate将会是更好的选择。
- 另外,从Apache 2.0.45开始, mod deflate模块可使用DeflateCompressionLevel指令来设置压缩级别。该指令的值可为1至(压缩速度最快,最低的压缩质量) 9 (最慢的压缩速度,压缩率最高)之间的整数,其默认值为6 (压缩速度和压缩质量较为平衡的值)这个简单的变化更是使得mod deflate可以轻松媲美mod-gzip的压缩。
- Apache实现网页压缩的功能模块包括
- mod_gzip模块
- mod_deflate模块
- Apache 1.x
- 没有内建网页压缩技术,但可使用第三方mod_gzip模块执行压缩
- Apache 2.x
- 在开发的时候,内建了mod_deflate这个模块,取代mod gzip
- mod_gzip模块与mod_deflate模块
- 两者均使用gzip压缩算法,运作原理类似
- mod_deflate压缩速度略快,而mod_gzip的压缩比略高
- mod_gzip对服务器CPU的占用要高一些
- 高流量的服务器,使用mod_deflate可能会比mod_gzip 加载速度更快
1.1.3:Apache的压缩试验
- 将这三个软件包传到opt目录下
[root@localhost ~]# cd /opt
[root@localhost opt]# ll
总用量 8020
-rw-r--r-- 1 root root 1071074 8月 4 17:33 apr-1.6.2.tar.gz
-rw-r--r-- 1 root root 565507 8月 4 17:33 apr-util-1.6.0.tar.gz
-rw-r--r-- 1 root root 6567926 8月 4 17:33 httpd-2.4.29.tar.bz2
drwxr-xr-x. 2 root root 6 3月 26 2015 rh
[root@localhost opt]# tar zxvf apr-1.6.2.tar.gz
[root@localhost opt]# tar zxvf apr-util-1.6.0.tar.gz
[root@localhost opt]# yum -y install bzip2 ## 如果是最小化安装需要安装bzip2
[root@localhost opt]# tar jxvf httpd-2.4.29.tar.bz2
[root@localhost opt]# mv apr-1.6.2 httpd-2.4.29/srclib/apr
[root@localhost opt]# mv apr-util-1.6.0 httpd-2.4.29/srclib/apr-util
- 安装环境编译HTTP的环境
##################安装环境##################
[root@localhost opt]#
yum -y install \
gcc \
gcc-c++ \
make \
pcre-devel \
expat-devel \
perl
- 现在安装压缩模块
[root@localhost httpd-2.4.29]#
./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi \
--enable-cgid \
--enable-deflate ##这是压缩模块
-------------------------------------
prefix:指定将 httpd 服务程序安装到哪个目录下,如/usr/local/httpd
--enable-so:启用动态加载模块支持,使 httpd 具备进一步扩展功能的能力。
--enable-rewrite:启用网页地址重写功能,用于网站优化及目录迁移维护。
--enable-charset-lite:启动字符集支持,以便支持使用各种字符集编码的网
--enable-cgi:启用 CGI 脚本程序支持,便于扩展网站的应用访问能力。
- 安装完之后进行编译
[root@localhost httpd-2.4.29]# make && make install
[root@localhost httpd-2.4.29]# systemctl restart httpd ## 开启http服务
- 优化执行路径
####优化执行路径####
ln -s /usr/local/httpd/conf/httpd.conf /etc/
ln -s /usr/local/httpd/bin/* /usr/local/bin/
httpd -v ###查看下HTTP版本
Server version: Apache/2.4.29 (Unix)
Server built: Aug 31 2020 02:01:04
- 建立[service].service 配置文件添加系统给服务。在/lib/systemd/system/目录下,建立一个以.service 结尾的单元(unit)配置文件,用于控制由 systemd 管理或监控的httpd 服务
###建立[service].service 配置文件添加系统给服务####
在/lib/systemd/system/目录下,建立一个以.service 结尾的单元(unit)配置文件,
用于控制由 systemd 管理或监控的 httpd 服务
[root@localhost ~]# cd /lib/systemd/system/
[root@localhost system]# vim httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/httpd/logs/httpd.pid
ExecStart= /usr/local/bin/apachectl $OPTIONS
ExecrReload= /bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
- 编译安装后, mod deflate模块需要在httpd.conf文件启用才能生效。
[root@localhost httpd-2.4.29]# vi /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 image/png image/jpg
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
</IfModule>
第一行代表对什么样的内容启用gzip压缩,
第二行代表压缩级别
第三行代表启用deflate 模块对本站点的输出进行 gzip 压缩。
==>> wq 保存
- 现在做测试页
## 把xshell或者别的软件把本地图片放进 /usr/local/httpd/htdocs 里
[root@localhost httpd-2.4.29]# vi /usr/local/httpd/htdocs/index.html
<html>
<head>
<title>--压缩测试页--</title>
</head>
<body>
<h1>这是压缩页的内容(女神镇楼)</h1>
<img src=b.jpg / > ## b.jpg 是图片的名称
</body>
</html>
- 注意中文乱码问题解决方法如下
vi /etc/httpd.conf
AddDefaultCharset utf-8
service httpd restart
- 验证实验
1.2:网页缓存
1.2.1:网页缓存概述
- 网页缓存是将一部分经常不会改变和变动很少的页面缓存,下次浏览器再次访问这些
页面时,不需要再次去下载这些页面,从而提高了用户的访问速度。 - Apache的mod expires模块会自动生成页面头部信息中的Expres标签和Cache-Control
标签,客户端浏览器根据标签决定下次访问是在本地机器的缓存中获取页面,不需要向服务器再次发出请求,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的。
1.2.2:配置网页的缓存时间
- 通过mod_expire模块配置Apache,使网页能在客户端浏览器缓存一段时间闻,以避免重复请求
- 启用mod_expire模块后,会自动生成页面头部信息中的Expires标签和Cache-Control标签,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的
- 查看是否安装了mod_expire模块
- /usr/local/apache/bin/apachectl -t-D DUMP_MODULES
- 如果输出中没有expires_module (static),则说明编译时没有安装mod_expires
- 如果没有安装,需要重新编译安装
- ./configure --enable-expires
- make && make install
- 修改httpd.conf配置文件
- 启用mod_expires模块,并设置http协议下任意格式的文档均60秒后过期
<lfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 60 seconds"
</lfModule>
- 重启httpd服务
- 重启Apache服务,再用浏览器访问测试网站
- 浏览器中选择“查看元素”可以看到有“Expires"项表示缓存生效
1.2.3:配置网页缓存时间实验
- 先关闭 HTTP 服务
[root@localhost httpd-2.4.29]# systemctl stop httpd
- 安装缓存时间模块
[root@localhost opt]# cd /opt/httpd-2.4.29/
./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi \
--enable-cgid \
--enable-deflate \
--enable-expires
- 编译
[root@localhost httpd-2.4.29]# make && make install
[root@localhost httpd-2.4.29]# vi /usr/local/httpd/conf/httpd.conf
LoadModule expires_module modules/mod_expires.so ## 前面的#号去掉,然后在下面插入
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 60 seconds"
</IfModule>
==>> wq 保存
- 检测httpd.conf 语法并启动服务
[root@localhost httpd-2.4.29]# httpd -t
Syntax OK
[root@localhost httpd-2.4.29]# systemctl restart httpd ##开启http服务
二:Apache安全优化
- 安全优化概述:
Apache的默认配置除了性能可以优化外,还需要对安全性进行相应的配置。默认配置能保证服务器正常提供服务,但Apache作为一个软件,必然也会存在一些漏洞,尽可能的降低潜在的风险,是管理员必须掌握的内容。
2.1: 隐藏版本信息
2.1.1:配置Apache隐藏版本信息
-
隐藏版本信息概述
- Apache的版本信息,透露了一定的漏洞信息,从而给网站带来安全隐患
- 生产环境中要配置Apache隐藏版本信息
- 将主配置文件httpd.conf以下行注释去掉
-
#Include conf/extra/httpd-default.conf
- 修改httpd-default.conf文件
-
ServerTokens Full修改为ServerTokens Prod
- 重启httpd服务,访问验证
2.1.2:Apache隐藏版本信息实验
- 修改httpd.conf 配置文件
[root@localhost httpd-2.4.29]# vi /usr/local/httpd/conf/httpd.conf
Include conf/extra/httpd-default.conf ## 去掉前面的 # 号
- 修改httpd-default.conf文件
## 修改httpd.conf 配置文件,使httpd-default.conf 文件生效,它里面包含了是否返回版
本信息的内容。
[root@localhost httpd-2.4.29]# vi /usr/local/httpd/conf/extra/httpd-default.conf
ServerTokens Full ==>> 改成 ServerTokens Prod
2.2:配置防盗链
-
一般来说,我们浏览一个完整的页面并不是一次性全部传送到客户端的。如果所请求的页面带有图片或其他信息,那么第一个Http请求传送的是这个页面的文本,然后通过客户端的浏览器对这段文本进行解释执行,如果发现其中还有图片,那么客户端的浏览器会再次发送一条Http请求,当这个请求被处理后这个图片文件才会被传送到客户端,最后浏览器会将图片安放到页面的正确位置,就这样一个完整的页面要经过多次发送Http请求才能够被完整的显示
-
基于这样的机制,就会产生盗链问题:如果一个网站中没有其页面中所说图片信息,那么它完全可以链接到其他网站的图片信息上。这样,没有任何资源的网站利用了别的网站的资源来展示给浏览者,提高了自己的访问量,而大部分浏览者又不会很容易地发现。一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接。一方面损害了原网站的合法利益,另一方面又加重了服务器的负担。
-
http标准协议中有专门的Referer字段记录,它的作用如下:
- 可以追溯上一个入站地址是什么
- 对于资源文件,可以跟踪到包含显示它的网页地址是什么,因此所有防盗链方法都
是基于这个Referer字段。
2.2.1:配置防盗链实验
- 再开一台虚拟机,配置好httpd服务
[root@localhost opt]# vi /usr/local/httpd/htdocs/index.html
进入后,把里面的内容删除,添加新的内容
<html>
<head>
<title>--压缩测试页--</title>
</head>
<body>
<h1>这是压缩页的内容(女神防盗)</h1>
<img src=http://20.0.0.6/b.jpg / > ## b.jpg 是图片的名称
</body>
</html>
==>> wq 保存
- 做主机映射
[root@localhost htdocs]# vi /etc/host ## 做映射
20.0.0.6 www.51xit.top ##这里是添加的 20.0.0.26 是正版网站的IP
==>> wq 保存
- ping 测试一下,查看是否可以连通
[root@localhost htdocs]# ping www.51xit.top ## ping 测试一下
PING www.51xit.com (20.0.0.6) 56(84) bytes of data.
64 bytes from www.51xit.top (20.0.0.6): icmp_seq=1 ttl=64 time=0.918 ms
[root@localhost httpd-2.4.29]# vi /usr/local/httpd/conf/httpd.conf
ServerName www.51xit.top:80 ### 把#号去掉,并改成自己的域名
AddDefaultCharset utf-8 ### 加在上面代码下面就行,解决中文乱码!
==>> wq 保存
[root@localhost htdocs]# systemctl restart httpd
测试一下,打开盗图网站