Apache网页优化
优化内容
- 配置网页压缩功能
- 配置网页缓存
- 工作模式的选择与参数优化
- 配置隐藏版本号
- 配置反盗链
网页压缩
gzip介绍
配置Apache的网页压缩功能,是使用gzip压缩算法来对网页内容进行压缩后在传输到客户端浏览器
作用
- 降低了网络传输的字节数,加速网页加载的速度
- 节省流量,改善用户的浏览体验
- gzip与搜索引擎的抓取工具有着更好的关系
gzip 提供了从 1 到 9 的九个压缩级别,以及一个默认的压缩级别(通常为 6)。级别 1 表示最快压缩速度但压缩率最低,而级别 9 则提供最高的压缩率但会花费最多的压缩时间。
- 级别 1:最快的压缩速度,但压缩率最低。
- 级别 9:最慢的压缩速度,但压缩率最高。
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加载速度更快
网页优化
网页压缩
#!/bin/bash
yum -y install wget
wget https://archive.apache.org/dist/httpd/httpd-2.4.25.tar.gz -P /root/
tar -zxf /root/httpd-2.4.25.tar.gz -C /usr/src/
yum -y install gcc gcc-* make
yum -y install apr-util-devel pcre-devel zlib-devel
echo "下载依赖完成"
cd /usr/src/httpd-2.4.25
echo "正在编译安装"
./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-deflate && make && make install && echo "编译安装结果" $?
echo "优化执行路径"
ln -s /usr/local/httpd/bin/* /usr/local/bin
echo "添加系统服务"
cat > /lib/systemd/system/httpd.service << 'EOF'
[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
EOF
echo "开启httpd服务"
systemctl start httpd
echo "设置httpd服务开机自启动"
systemctl enable httpd
rm -rf /root/httpd-2.4.25.tar.gz
[root@bogon ~]# vi /usr/local/httpd/conf/httpd.conf
106行 去掉#号 LoadModule deflate_module modules/mod_deflate.so
末尾加
<IfModule mod_deflate.c>
# 设置压缩级别
DeflateCompressionLevel 6
# 插入过滤器
SetOutputFilter DEFLATE
# 添加过滤类型
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript application/javascript application/json
# 设置不对后缀 gif,jpg,jpeg,png 的图片文件进行压缩
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
# 设置对文件是文本的内容进行压缩,例如text/html text/css text/plain等
AddOutputFilterByType DEFLATE text/*
AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp
</IfModule>
[root@bogon ~]# apachectl -t
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK
[root@bogon ~]# systemctl start httpd
[root@bogon ~]#
apachectl -t -D DUMP_MODULES | grep "deflate"
这个命令的目的是检查 Apache HTTP 服务器是否加载了用于压缩 HTTP 响应的
deflate 模块(或其等效模块)。如果命令输出包含 "deflate" 字符串的行,则表示该模块已加载。如果没有输出,则表示可能未加载该模块,或者该模块在 Apache 的配置中没有以包含 "deflate" 的方式命名(尽管这种情况很少见)。
apachectl -t -D DUMP_MODULES | grep "deflate" 这个命令的目的是检查 Apache HTTP 服务器是否加载了用于压缩 HTTP 响应的 deflate 模块(或其等效模块)。如果命令输出包含 "deflate" 字符串的行,则表示该模块已加载。如果没有输出,则表示可能未加载该模块,或者该模块在 Apache 的配置中没有以包含 "deflate" 的方式命名(尽管这种情况很少见)。
网页缓存
- 通过mod_expire模块配置Apache,使用网页能在客户端浏览器缓存一段时间,以避免重复请求
- 启用mod_expire模块后,会自动生成页面头部信息中的Expires标签和Cache-Control标签,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的
[root@bogon ~]# vi /usr/local/httpd/conf/httpd.conf
113 行 去掉#号 LoadModule expires_module modules/mod_expires.so
结尾加
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 60 seconds"
</IfModule>
[root@bogon ~]# systemctl restart httpd
Apache安全优化
隐藏版本信息
[root@bogon ~]# vi /usr/local/httpd/conf/extra/httpd-default.conf
55 ServerTokens Prod Prod :生产环境
[root@bogon ~]# vi /usr/local/httpd/conf/httpd.conf
483 行 Include conf/extra/httpd-default.conf
[root@bogon ~]# systemctl restart httpd
配置反盗链
环境的准备
主机 | 操作系统 | 主要软件及版本 |
apache1 | CentOS 7.9 | httpd-2.4.25.tar.gz |
apache1 | CentOS 7.9 | httpd-2.4.25.tar.gz |
客户端 | CentOS 7.9Desktop | 火狐浏览器 |
服务器1(最小化)
[root@bogon ~]# vi /usr/local/httpd/conf/httpd.conf
201行 ServerName www.test01.com
[root@bogon ~]# systemctl restart httpd
服务器2(最小化)
部署httpd 省略
[root@bogon ~]# vi /usr/local/httpd/conf/httpd.conf
201行 ServerName www.test02.com
[root@bogon ~]# systemctl restart httpd
[root@bogon ~]# cat /usr/local/httpd/htdocs/index.html
<html><body><h1>It works!</h1>
<img src="http://www.test01.com/logo_jpg.jpg"/>
</body></html>
[root@bogon ~]#
服务器3(桌面版)
三台机器都需要写
[root@bogon ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.xxx.xxx www.test01.com
192.168.xxx.xxx www.test02.com
服务器3(桌面版)验证
服务器1(最小化)
[root@bogon ~]# vi /usr/local/httpd/conf/httpd.conf
159 LoadModule rewrite_module modules/mod_rewrite.so
246 AllowOverride ALL
RewriteEngine On
# 不已这些开头的就会被重写
RewriteCond %{HTTP_REFERER} !^http://test01.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://test01.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.test01.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.test01.com/$ [NC]
# 重写规则
RewriteRule .*\.(gif|jpg|swf)$ http://www.test01.com/error.png
[root@bogon ~]# systemctl restart httpd
服务器3(桌面版)