文章目录
一、Apache网页优化
1.1 网页压缩
1.1.1 网页优化概述
- 在企业中,部署Apache后会有默认的配置参数,如果不及时进行优化配置,在当今互联网时代,会引发网站很多问题
- 为了适应企业需求,就需要考虑如何提升Apache的性能与稳定性,这就是Apache的优化内容
- 优化内容
- 配置网页压缩功能
- 配置网页缓存
- 工作模式的选择与参数优化
- 配置防盗链
- 配置隐藏版本号
- …
1.1.2 gzip介绍
- 配置Apache的网页压缩功能,是使用gzip压缩算法来对网页内容进行压缩后在传输到客户端浏览器
- 作用
- 降低了网络传输的字节数,加快网页加载的速度
- 节省流量,改善用户的浏览体验
- gzip与搜索引擎的抓取工作有着更好的关系
1.1.3 Apache的压缩模块
- 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.4 配置网页压缩功能
启用网页压缩功能步骤
【1】查看是否安装mod_deflate模块
- 检查是否已安装mod_deflate模块
- 执行apachectl -t -D DUMP_MODULES命令
- 如果输出中没有deflate_module(static),说明编译时没有安装mod_deflate模块
- 若没有安装,则需要从新编译安装
- ./configure --enable-deflate…
- make && make install
【2】修改配置文件,启用压缩功能
- 在配置httpd.conf中配置开启gzip功能
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript '设置对什么样的内容启用gzip压缩'
DeflateCompressionLevel '压缩级别'
SetOutputFilter DEFLATE '启用deflate模块对本站点的输出进行gzip压缩'
【3】访问测试
- 重启Apache服务,再用火狐浏览器访问测试网站
- 在浏览器中选择“查看元素”可以看到有“Accept-Encoding:gzip"表示压缩已经生效
Apache网页压缩实操
环境准备
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
rh
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# ls
apr-1.6.2.tar.gz apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2 rh
[root@localhost opt]# tar jxvf httpd-2.4.29.tar.bz2
[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]# ls
apr-1.6.2 apr-util-1.6.0 httpd-2.4.29 rh
apr-1.6.2.tar.gz apr-util-1.6.0.tar.gz 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
安装编译器和其他工具
[root@localhost opt]# yum -y install \
> gcc \ '编译器'
> gcc-c++ \ '编译器'
> make \ 'make工具'
> pcre-devel \ '支持正则表达式的工具'
> expat-devel \ '使网站能解析标签语言的工具'
> perl \ 'Perl语言工具'
> zlib-devel '压缩功能软件包'
configure配置
[root@localhost httpd-2.4.29]# ./configure \
> --prefix=/usr/local/httpd \
> --enable-deflate \ '开启deflate压缩功能'
> --enable-so \ '开启核心功能模块'
> --enable-rewrite \ '开启重写功能,如防盗链保护'
> --enable-charset-lite \ '开启字符集'
> --enable-cgi '开启通用网关接口'
编译安装
[root@localhost httpd-2.4.29]# make
[root@localhost httpd-2.4.29]# make install
###配置文件路径太长,建一个软链接
###打开Apache主配置文件
###必须开启三个模块:headers(默认开启)、deflate(需要自行开启)、filter(默认开启)
###在Apache主配置文件末尾添加deflate功能(放一张图片在网页中做测试查看gzip)
###开启deflate功能模块
###指明对html、plain、css、xml、javascript文件,添加jpg、png图片,要增加其他功能如视频,就需要在后面添加类型就行了
###创建最高压缩包(压缩级别9)
###所有输出文件压缩过滤
编辑配置文件
[root@localhost httpd-2.4.29]# ln -s /usr/local/httpd/conf/httpd.conf /etc/
[root@localhost httpd-2.4.29]# vim /etc/httpd.conf
112 LoadModule headers_module modules/mod_headers.so '头部功能'
105 LoadModule deflate_module modules/mod_deflate.so '压缩功能(去掉开头#)'
101 LoadModule filter_module modules/mod_filter.so '过滤器功能'
......
509 <IfModule mod_deflate.c>
510 AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript text/jpg text/png
511 DeflateCompressionLevel 9
512 SetOutputFilter DEFLATE
513 </IfModule>
Listen 14.0.0.11:80 '开启监听端口'
#Listen 80 '注释掉ipv6的监听端口功能'
ServerName www.yyc.com:80 '设置服务域名'
[root@localhost httpd-2.4.29]# /usr/local/httpd/bin/httpd -t '验证语法'
Syntax OK
[root@localhost httpd-2.4.29]# netstat -ntap | grep 80 '查看端口状态'
tcp6 0 0 :::80 :::* LISTEN 112181/httpd
'验证脚本在/usr/local/httpd/bin/中'
[root@localhost httpd-2.4.29]# cd /usr/local/httpd/bin/
[root@localhost bin]# ls
ab apu-1-config dbmmanage fcgistarter htdigest httxt2dbm
apachectl apxs envvars htcacheclean htpasswd logresolve
apr-1-config checkgid envvars-std htdbm httpd rotatelogs
[root@localhost bin]# ./apachectl -t ###验证配置文件语法
Syntax OK
[root@localhost bin]# ./apachectl -t -D DUMP_MODULES | grep "deflate" '验证模块'
deflate_module (shared) '说明网页里所有的图片文字都是经过压缩的'
更改首页站点htdocs,加入一张图片
[root@localhost bin]# cd /usr/local/httpd/
[root@localhost httpd]# ls
bin build cgi-bin conf error htdocs icons include lib logs man manual modules
[root@localhost httpd]# cd htdocs/
[root@localhost htdocs]# ls
index.html
[root@localhost htdocs]# rz -E '拖入jpg格式图片,与网页在同一路径下'
rz waiting to receive.
[root@localhost htdocs]# ls
index.html test.jpg.jpg
[root@localhost htdocs]# vim index.html
<html><body><h1>It works!</h1></body></html>
<img src="test.jpg"/> '加入图片'
###win10中安装Fiddler软件,安装完打开软件,就开抓包了
###打开网页,访问14.0.0.11
可以看到request headers和response headers 里面中的信息都是经过压缩的
网页压缩完成
1.2 网页缓存
1.2.1 配置网页的缓存时间
-
通过mod_expire模块配置Apache,使网页能在客户端浏览器缓存一段时间,以避免重复请求
-
启用mod_expire模块后,会自动生成页面头部信息中的Expires标签和Cache-Control标签,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的
启用网页的缓存功能步骤
【1】查看是否安装mod_expire模块
- 查看是否安装mod_expire模块
- /usr/local/apache/bin/apachectl -t -D DUMP_MODULES
- 如果输出中没有expires_module(static),则说明编译时没有安装mod_expires
- 若没有安装则需要重新编译安装
- ./configure --enable-expires…
- make && make install
【2】修改配置文件启用缓存功能
- 修改http.conf配置文件
- 启用mod_expires模块,并设置http协议下任意格式的文档均60秒后过期
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 60 seconds"
</IfModule>
- 重启httpd服务
【3】抓包测试
- 再次访问测试网站,使用抓包工具Fiddler进行数据抓取分析
Apache网页缓存实操
环境准备
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
[root@localhost ~]# cd /opt
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# ls
apr-1.6.2.tar.gz apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2 rh
[root@localhost opt]# tar jxvf httpd-2.4.29.tar.bz2
[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]# 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
装软件包环境,安装编译器和其他工具
[root@localhost opt]# yum -y install \
> gcc \ '编译器'
> gcc-c++ \ '编译器'
> make \ 'make工具'
> pcre-devel \ '支持正则表达式的工具'
> expat-devel \ '使网站能解析标签语言的工具'
> perl \ 'Perl语言工具'
> zlib-devel '压缩功能软件包'
configure配置
[root@localhost httpd-2.4.29]# ./configure \
> --prefix=/usr/local/httpd \
> --enable-deflate \ '开启deflate压缩功能'
> --enable-so \ '开启核心功能模块'
> --enable-rewrite \ '开启重写功能,如防盗链保护'
> --enable-charset-lite \ '开启字符集'
> --enable-cgi '开启通用网关接口'
编译安装
[root@localhost httpd-2.4.29]# make
[root@localhost httpd-2.4.29]# make install
###修改主配置文件
开启缓存模块功能
配置文件末尾添加:
[root@localhost httpd-2.4.29]# vim /usr/local/httpd/conf/httpd.conf
111 LoadModule expires_module modules/mod_expires.so '开启缓存模块功能'
...
509 <IfModule mod_expires.c>
510 ExpiresActive On '开启缓存功能'
511 ExpiresDefault "access plus 50 seconds" '保存50秒'
512 </IfModule>
测试
[root@localhost httpd-2.4.29]# cd /usr/local/httpd/
[root@localhost httpd]# ls
bin build cgi-bin conf error htdocs icons include lib logs man manual modules
[root@localhost httpd]# cd bin/
[root@localhost bin]# ls
ab apu-1-config dbmmanage fcgistarter htdigest httxt2dbm
apachectl apxs envvars htcacheclean htpasswd logresolve
apr-1-config checkgid envvars-std htdbm httpd rotatelogs
[root@localhost bin]# ./apachectl -t
Syntax OK
[root@localhost bin]# ./apachectl '开启'
[root@localhost bin]# netstat -ntap | grep httpd
tcp 0 0 14.0.0.11:80 0.0.0.0:* LISTEN 111216/httpd
[root@localhost bin]# ./apachectl -t -D DUMP_MODULES | grep "expires" '验证模块'
expires_module (shared) '说明网页里所有的图片文字都是经过压缩的'
更改首页站点htdocs
[root@localhost bin]# cd ..
[root@localhost httpd]# cd htdocs/
[root@localhost htdocs]# ls
index.html
[root@localhost htdocs]# rz -E
rz waiting to receive.
[root@localhost htdocs]# ls
index.html test.jpg
[root@localhost htdocs]# vim index.html
<html><body><h1>It works!</h1></body></html>
<img src="test.jpg"/>
网页验证
二、Apache安全优化、
2.1 配置防盗链
2.1.1 防盗链概述
- 防盗链就是防止别人的网站代码里面盗用服务器的图片,文件,视频等相关资源
- 如果别人盗用网站的这些静态资源,明显的是会增大服务器的带宽压力
- 作为网站的维护人员,要杜绝我们服务器的静态资源被其他网站盗用
2.1.2 盗链模拟步骤
- 两台主机配置测试页面
- 盗链网站的测试网页page盗用源主机目录page/image的一个test.jpg文件
- 在Windows中访问测试网页,并使用Fiddler抓包工具的查看效果图
2.1.3 检查Apache是否安装了mod_rewrite模块
- /usr/local/apache/bin/apachectl -t -D DUMP_MODULES
- 如果输出中没有rewrite_module(static),则说明编译时没有安装mod_resrite模块
- 若没有安装则需要重新编译安装
- ./configure --enable-rewrite…
- make && make install
2.1.4 配置规则变量说明
%{HTTP_REFERER}:浏览header中的链接字段,存放一个链接的URL,代表是从哪个链接访问所需的网页
!^:不以后面的字符串开头
.*$:以任意字符结尾
NC:不区分大写
R:强制跳转
2.1.5规则匹配说明
-
规则匹配
- 如果相应变量的值匹配所设置的规则,则逐条往下处理;如果不匹配,则往后的规则不再匹配
-
规则匹配说明
-
RewriteEngine On:打开网页重写功能
-
RewriteCond:设置匹配规则
-
RewriteRule:设置跳转动作
-
2.1.6 配置操作演示
修改配置文件,启用防盗链功能并设置规则
RewriteEngine On
RewriteCond %{HTTP_REFERER}!^http://test.com/.*$ [NC]
RewriteCond %{HTTP_REFERER}!^http://test.com$ [NC]
RewriteCond %{HTTP_REFERER}!^http://www.test.com/.*$ [NC]
RewriteCond %{HTTP_REFERER}!^http://www.test.com$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.test.com/error.html [R,NC]
- 如果访问的域名不是url访问的域名(官网),而是从链接那跳转过来的(不以www.krl.com),不管前面是以什么字符,都弹出一个url的地址(错误信息的图片)
防盗链实操
[root@localhost ~]# hostnamectl set-hostname yyc '设置为官方网站'
[root@localhost ~]# su
[root@yyc ~]# iptables -F
[root@yyc ~]# setenforce 0
设置dns
[root@yyc ~]# yum install bind -y
[root@yyc ~]# vim /etc/named.conf
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; };
[root@yyc ~]# vim /etc/named.rfc1912.zones
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "yyc.com" IN {
type master;
file "yyc.com.zone";
allow-update { none; };
};
[root@yyc ~]# cd /var/named/
[root@yyc named]# cp -p named.localhost yyc.com.zone
[root@yyc named]# vim yyc.com.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
www IN A 14.0.0.11
[root@yyc named]# systemctl start named
设置环境
[root@yyc named]# rz -E
rz waiting to receive.
[root@yyc named]# ls
apr-1.6.2.tar.gz dynamic named.empty slaves
apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2 named.localhost yyc.com.zone
data named.ca named.loopback
[root@yyc named]# tar jxvf httpd-2.4.29.tar.bz2 -C /opt/
[root@yyc named]# tar zxvf apr-1.6.2.tar.gz -C /opt/
[root@yyc named]# tar zxvf apr-util-1.6.0.tar.gz -C /opt/
[root@yyc named]# cd /opt/
[root@yyc opt]# ls
apr-1.6.2 apr-util-1.6.0 httpd-2.4.29 rh
[root@yyc opt]# mv apr-1.6.2/ httpd-2.4.29/srclib/apr
[root@yyc opt]# mv apr-util-1.6.0/ httpd-2.4.29/srclib/apr-util
[root@yyc opt]# cd httpd-2.4.29/
[root@yyc httpd-2.4.29]# ls
ABOUT_APACHE BuildBin.dsp emacs-style LAYOUT NOTICE srclib
acinclude.m4 buildconf httpd.dep libhttpd.dep NWGNUmakefile support
Apache-apr2.dsw CHANGES httpd.dsp libhttpd.dsp os test
Apache.dsw CMakeLists.txt httpd.mak libhttpd.mak README VERSIONING
apache_probes.d config.layout httpd.spec LICENSE README.cmake
ap.d configure include Makefile.in README.platforms
build configure.in INSTALL Makefile.win ROADMAP
BuildAll.dsp docs InstallBin.dsp modules server
[root@yyc httpd-2.4.29]# yum install gcc gcc-c++ pcre pcre-devel perl expat-devel zlib-devel -y
'perl跨平台'
[root@yyc httpd-2.4.29]# ./configure \
> --prefix=/usr/local/httpd \
> --enable-default \
> --enable-so \
> --enable-rewrite \
> --enable-charset-lite \
> --enable-cgi
[root@yyc httpd-2.4.29]# make&&make install
修改配置文件(暂不开启防盗链),体验盗链
[root@yyc httpd-2.4.29]# ln -s /usr/local/httpd/conf/httpd.conf /etc/
[root@yyc bin]# vim /usr/local/httpd/conf/httpd.conf
Listen 14.0.0.11:80
#Listen 80
...
ServerName www.yyc.com:80
更改首页站点htdocs,做一个网站
[root@yyc httpd-2.4.29]# cd /usr/local/httpd/
[root@yyc httpd]# ls
bin build cgi-bin conf error htdocs icons include lib logs man manual modules
[root@yyc httpd]# cd htdocs/
[root@yyc htdocs]# ls
index.html
[root@yyc htdocs]# rz -E '拖入jpg格式的两张图片'
rz waiting to receive.
[root@yyc htdocs]# ls
error.jpg index.html test.jpg
[root@yyc htdocs]# vim index.html
<html><body><h1>It works!</h1></body></html>
<img src="test.jpg"/>
启动服务
[root@yyc htdocs]# cd ..
[root@yyc httpd]# ls
bin build cgi-bin conf error htdocs icons include lib logs man manual modules
[root@yyc httpd]# cd bin/
[root@yyc bin]# ./apachectl start ###启动服务
[root@yyc bin]# netstat -ntap | grep httpd
tcp6 0 0 :::80 :::* LISTEN 110843/httpd
正常访问验证:
做盗链网站
新开一台虚拟机
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install httpd -y
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
Listen 14.0.0.33:80
#Listen 80
...
ServerName www.test.com:80
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# ls
[root@localhost html]# vim index.html
<h1>this is test web</h1>
<img src="http://www.yyc.com/test.jpg"/> '指的是域名,需要DNS帮助解析'
'指定DNS解析'
[root@localhost html]# echo "nameserver 14.0.0.11" > /etc/resolv.conf
[root@localhost html]# systemctl start httpd
[root@localhost html]# netstat -ntap | grep httpd
tcp 0 0 14.0.0.33:80 0.0.0.0:* LISTEN 79140/httpd
'###验证盗链网站(如果需要域名解析则再安装bind)'
验证盗链网站:
盗链成功
做防盗链设置
[root@yyc bin]# cd ..
[root@yyc httpd]# pwd
/usr/local/httpd
[root@yyc httpd]# cd conf/
[root@yyc conf]# ls
extra httpd.conf magic mime.types original
[root@yyc conf]# vim httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so '开启重写功能模块(去掉开头#)'
...
'#####/Diretcory搜索,在这个标签末尾加上防盗链设置'
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://yyc.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://yyc.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.yyc.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.yyc.com/$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.yyc.com/error.jpg '把error.jpg图片放到网页站点目录下'
'###重启服务'
[root@yyc /]# cd /usr/local/httpd/
[root@yyc httpd]# ls
bin build cgi-bin conf error htdocs icons include lib logs man manual modules
[root@yyc httpd]# cd bin/
[root@yyc bin]# ls
ab apu-1-config dbmmanage fcgistarter htdigest httxt2dbm
apachectl apxs envvars htcacheclean htpasswd logresolve
apr-1-config checkgid envvars-std htdbm httpd rotatelogs
[root@yyc bin]# ./apachectl stop
[root@yyc bin]# ./apachectl start
###win10清除缓存空间
防盗链成功
2.2 隐藏版本信息
2.2.1 配置Apache隐藏版本信息
配置Apache隐藏版本信息的必要性
- Apache的版本信息,透露了一定的漏洞信息,从而给网站带来安全隐患
- 生产环境中要配置Apache隐藏版本信息
- 可使用Fiddler抓包工具分析
配置Apache隐藏版本信息详解
- 将主配置文件httpd.conf以下行注释去掉
- #Include conf/extra/httpd-default.conf
- 修改httpd-default.conf文件两个地方
- ServerTokens Full修改为ServerTokens Prod
- 将ServersSignature On 修改为ServersSignature Off
- 重启httpd服务,访问网站,抓包测试
隐藏版本信息实操
正常情况下是可以通过抓包看到版本号的
[root@yyc bin]# cd ..
[root@yyc httpd]# cd conf/
[root@yyc conf]# ls
extra httpd.conf magic mime.types original
[root@yyc conf]# vim httpd.conf
# Virtual hosts
Include conf/extra/httpd-vhosts.conf ###开启隐藏功能(去掉#)
修改httpd-default.conf配置文件
[root@yyc conf]# pwd
/usr/local/httpd/conf
[root@yyc conf]# cd extra/
[root@yyc extra]# ls
httpd-autoindex.conf httpd-info.conf httpd-mpm.conf httpd-userdir.conf
httpd-dav.conf httpd-languages.conf httpd-multilang-errordoc.conf httpd-vhosts.conf
httpd-default.conf httpd-manual.conf httpd-ssl.conf proxy-html.conf
[root@yyc extra]# vim httpd-default.conf
55 ServerTokens Prod '将Full改为Prod'
[root@yyc extra]# cd ..
[root@yyc conf]# ls
extra httpd.conf magic mime.types original
[root@yyc conf]# cd ..
[root@yyc httpd]# ls
bin build cgi-bin conf error htdocs icons include lib logs man manual modules
[root@yyc httpd]# cd bin/
[root@yyc bin]# ls
ab apu-1-config dbmmanage fcgistarter htdigest httxt2dbm
apachectl apxs envvars htcacheclean htpasswd logresolve
apr-1-config checkgid envvars-std htdbm httpd rotatelogs
[root@yyc bin]# ./apachectl stop
[root@yyc bin]# ./apachectl start
浏览器网页验证: