文章目录
- 一:Apache网页优化概述
- 二:gzip介绍
- 三:apache的压缩模块
- 四:配置网页压缩功能
- 五:配置网页压缩功能
- 六:配置网页的缓存时间
- 6.1 通过mod_expire模块配置apache,使网页能在客户端浏览器缓存一段时间,以避免重复请求
- 6.2 启用mod_expire模块后,会自动生成页面头部信息中的Expires标签和Cache-ontrol标签,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的
- 6.3 启用网页缓存功能步骤
- 6.4 查看是否安装了mod_expire模块
- 6.5 如果没有安装则要重新编译安装
- 6.6 修改httpd.conf配置文件
- 6.7 重启httpd服务
- 6.8 再次访问测试网站,使用抓包工具Fiddler进行数据抓取分析
- 6.9 实验验证expires功能模块
- 七:配置apache隐藏版本信息
- 7.1 apache的版本信息,透露了一定的漏洞信息,从而给网站带来安全隐患
- 7.2 生产环境中要配置apache隐藏版本信息
- 7.3 可使用Fiddler抓包工具分析
- 7.4 配置apache隐藏版本信息
- 7.4.1 将主配置文件httpd.conf以下行注释去掉,开启子配置文件
- 7.4.2 修改httpd-default.conf文件两个地方
- 7.4.3 将ServersSignature On 修改为ServersSignature Off
- 7.5 重启httpd服务,访问网站,抓包测试
- 7.6 实验验证
- 八:配置apache实现防盗链
前言:
apache网页优化
- 网页压缩
- 网页缓存
apache安全优化
- 配置防盗链
- 与隐藏版本信息
一:Apache网页优化概述
- 在企业中,部署apache后只采用默认的配置参数,会引发网站很多问题,换言之默认配置是针对以前较低的服务器配置的,以前的配置已经不适用当今的互联网时代
- 为了适应企业需求,就需要考虑如何提升apache的性能与稳定性,这就是apache优化的内容
1.1 优化内容
- 配置网页压缩功能
- 工作模式的选择与参数优化
- 配置防盗链
- 配置隐藏版本号
二:gzip介绍
配置apache的网页压缩功能,是使用gzip压缩算法来对网页内容进行压缩后再传输到客户端浏览器
作用
- 降低了网络传输的字节数,加快网页加载的速度
- 节省流量,改善用户的浏览体验,在按量计费是省钱
- gzip与搜索引擎的抓取工具有着更好的关系
三:apache的压缩模块
3.1 apache实现网页压缩的功能模块包括
- mod_gzip 模块
- mod_deflate 模块
3.2 apache 1.x
- 没有内建网页压缩技术,但可使用第三方mod_gzip 模块执行压缩
3.3 apache 2.x
- 在开发的时候,内建了mod_deflate 这个模块,取代mod_gzip
- 2.4.29 需要额外安装expat-devel 组件
3.4 mod_gzip 模块与mod_deflate 模块
- 两者均使用gzip压缩算法,运作原理类似
- mod_deflate 压缩速度略快,而mod_gzip的压缩比略高
- mod_gzip对服务器CPU的占用要高一些
- 高流量的服务器,使用mod_deflate 可能会比mod_gzip 加载速度更快
四:配置网页压缩功能
- 启用网页压缩功能步骤
4.1 首先检查是否安装了mod_deflate模块
- 执行apachectl -t -D DUMP_MODULES命令
- 如果输出中没有deflate_module(static),说明编译时没有安装mod_deflate模块
4.2 若没有安装则要重新编译安装
- ./configure --enable-deflate
- make && make install
五:配置网页压缩功能
5.1 在配置httpd.conf 中配置开启gzip功能
- AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript
————————代表对什么样的内容启用gzip压缩
- DeflateCompressionLevel
————————代表压缩级别
- SetOutputFilter DEFLATE
————————代表启用deflate模块对本站点的输出进行gzip压缩
5.2 重启apache服务,再用浏览器访问测试网站,并用Fiddler工具抓包,进行对比分析
5.3 实验验证deflate功能模块
5.3.1 创建挂载点,解压文件
[root@localhost ~]# mkdir /abc
[root@localhost ~]# mount.cifs //192.168.254.10/linuxs /abc
Password for root@//192.168.254.10/linuxs:
[root@localhost ~]# cd /abc/LAMP-C7/
[root@localhost LAMP-C7]# ls
apr-1.6.2.tar.gz httpd-2.4.29.tar.bz2 php-5.6.11.tar.bz2
apr-util-1.6.0.tar.gz LAMP-php5.6.txt
Discuz_X2.5_SC_UTF8.zip mysql-5.6.26.tar.gz
[root@localhost LAMP-C7]# tar xzvf apr-1.6.2.tar.gz -C /opt
[root@localhost LAMP-C7]# tar xzvf apr-util-1.6.0.tar.gz -C /opt
[root@localhost LAMP-C7]# tar xjvf httpd-2.4.29.tar.bz2 -C /opt
[root@localhost LAMP-C7]# cd /opt
[root@localhost opt]# ls
apr-1.6.2 apr-util-1.6.0 httpd-2.4.29 rh
5.3.2 安装编译包
[root@localhost opt]# yum install gcc gcc-c++ perl pcre pcre-devel expat-devel make zlib-devel -y
已安装:
expat-devel.x86_64 0:2.1.0-10.el7_3 gcc.x86_64 0:4.8.5-39.el7
gcc-c++.x86_64 0:4.8.5-39.el7 pcre-devel.x86_64 0:8.32-17.el7
zlib-devel.x86_64 0:1.2.7-18.el7
作为依赖被安装:
cpp.x86_64 0:4.8.5-39.el7
glibc-devel.x86_64 0:2.17-292.el7
glibc-headers.x86_64 0:2.17-292.el7
kernel-headers.x86_64 0:3.10.0-1062.9.1.el7
libmpc.x86_64 0:1.0.1-3.el7
libstdc++-devel.x86_64 0:4.8.5-39.el7
更新完毕:
make.x86_64 1:3.82-24.el7 perl.x86_64 4:5.16.3-294.el7_6
作为依赖被升级:
glibc.x86_64 0:2.17-292.el7 glibc-common.x86_64 0:2.17-292.el7
libgcc.x86_64 0:4.8.5-39.el7 libgomp.x86_64 0:4.8.5-39.el7
libstdc++.x86_64 0:4.8.5-39.el7 perl-libs.x86_64 4:5.16.3-294.el7_6
zlib.x86_64 0:1.2.7-18.el7
完毕!
5.3.3 配置属性
[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]# cd httpd-2.4.29/
[root@localhost httpd-2.4.29]#
[root@localhost httpd-2.4.29]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-expires --enable-cgi --enable-deflate
configure: summary of build options:
--
Server Version: 2.4.29
Install prefix: /usr/local/httpd
C compiler: gcc -std=gnu99
CFLAGS: -g -O2 -pthread
CPPFLAGS: -DLINUX -D_REENTRANT -D_GNU_SOURCE
LDFLAGS:
LIBS:
C preprocessor: gcc -E
5.3.4 make编译
[root@localhost httpd-2.4.29]# make && make install
mkdir /usr/local/httpd/man
mkdir /usr/local/httpd/man/man1
mkdir /usr/local/httpd/man/man8
mkdir /usr/local/httpd/manual
make[1]: 离开目录“/opt/httpd-2.4.29”
5.3.5 优化配置文件和脚本,开启压缩模块
[root@localhost httpd-2.4.29]# ln -s /usr/local/httpd/conf/httpd.conf /etc/httpd.conf
[root@localhost httpd-2.4.29]# grep -v "#" /usr/local/httpd/bin/apachectl > /etc/init.d/httpd
[root@localhost httpd-2.4.29]# ls -l /etc/init.d/httpd
-rw-r--r--. 1 root root 987 12月 17 16:26 /etc/init.d/httpd
[root@localhost httpd-2.4.29]# chmod +x /etc/init.d/httpd
[root@localhost httpd-2.4.29]# ls -l /etc/init.d/httpd
-rwxr-xr-x. 1 root root 987 12月 17 16:26 /etc/init.d/httpd
[root@localhost httpd-2.4.29]# chkconfig --add httpd
[root@localhost httpd-2.4.29]# chkconfig --list httpd
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。
要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。
httpd 0:关 1:关 2:关 3:开 4:关 5:开 6:关
[root@localhost httpd-2.4.29]# ln -s /usr/local/httpd/bin/* /usr/local/bin/
[root@localhost httpd-2.4.29]# vim /etc/init.d/httpd
//开头增加
#!/bin/sh
# chkconfig: 35 85 21
# description: Apache is a World Wide Web server
[root@localhost httpd-2.4.29]# vim /etc/httpd.conf
51 Listen 192.168.247.149:80
52 #Listen 80
101 LoadModule filter_module modules/mod_filter.so
105 LoadModule deflate_module modules/mod_deflate.so
112 LoadModule headers_module modules/mod_headers.so
198 ServerName www.kgc.com:80
//在末尾加入deflate压缩模块详细参数
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/j
avascript text/jpg text/png
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
</IfModule>
5.3.6 关闭防火墙
[root@localhost httpd-2.4.29]# systemctl stop firewalld.service
[root@localhost httpd-2.4.29]# setenforce 0
5.3.7 验证语法,验证deflate是否开启
[root@localhost httpd-2.4.29]# apachectl -t
Syntax OK
[root@localhost httpd-2.4.29]# apachectl -t -D DUMP_MODULES | grep "deflate"
deflate_module (shared)
5.3.8 开启服务,注意,此时不可以补全
[root@localhost httpd-2.4.29]# systemctl start httpd
[root@localhost httpd-2.4.29]# netstat -natp | grep "httpd"
tcp 0 0 192.168.247.149:80 0.0.0.0:* LISTEN 36256/httpd
5.3.9 客户机抓包验证,是否开启gzip。先在网页内加入一张图片
[root@localhost httpd-2.4.29]# cp /abc/bzhw.png /usr/local/httpd/htdocs/
[root@localhost httpd-2.4.29]# cd /usr/local/httpd/htdocs/
[root@localhost htdocs]# ls
bzhw.png index.html
[root@localhost htdocs]# vim index.html
<html><body><h1>It works!</h1>
<img src="bzhw.png"/>
</body></html>
在客户机内安装fidder,查看是否存在压缩的参数
备注:此时修改网页的参数,并没有重新开启服务,依旧可以读取到照片
六:配置网页的缓存时间
6.1 通过mod_expire模块配置apache,使网页能在客户端浏览器缓存一段时间,以避免重复请求
6.2 启用mod_expire模块后,会自动生成页面头部信息中的Expires标签和Cache-ontrol标签,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的
6.3 启用网页缓存功能步骤
6.4 查看是否安装了mod_expire模块
- /usr/local/apache/bin/apachectl -t -D DUMP_MODULES
- 如果输出中没有expire_module(static),则说明编译时没有安装mod_expire
6.5 如果没有安装则要重新编译安装
- ./configure --enable-expires
- make && make install
6.6 修改httpd.conf配置文件
启用mod_expires模块,并设置http协议下任意格式的文档均60秒后过期
6.7 重启httpd服务
6.8 再次访问测试网站,使用抓包工具Fiddler进行数据抓取分析
6.9 实验验证expires功能模块
6.9.1 创建挂载点
[root@localhost ~]# mkdir /abc
[root@localhost ~]# mount.cifs //192.168.254.10/linuxs /abc
Password for root@//192.168.254.10/linuxs:
[root@localhost ~]#
6.9.2 解压文件
[root@localhost ~]# cd /abchttpd2.4.2版本/
[root@localhost httpd2.4.2版本]#
[root@localhost httpd2.4.2版本]# ls
apr-1.4.6.tar.gz apr-util-1.4.1.tar.gz httpd-2.4.2.tar.gz
[root@localhost httpd2.4.2版本]# tar zxvf httpd-2.4.2.tar.gz -C /opt
[root@localhost httpd2.4.2版本]# tar zxvf apr-1.4.6.tar.gz -C /opt
[root@localhost httpd2.4.2版本]# tar zxvf apr-util-1.4.1.tar.gz -C /opt
6.9.3 配置文件属性
[root@localhost httpd2.4.2版本]# cd /opt
[root@localhost opt]# ls
apr-1.4.6 apr-util-1.4.1 httpd-2.4.2 rh
[root@localhost opt]# mv apr-1.4.6/ httpd-2.4.2/srclib/apr
[root@localhost opt]# mv apr-util-1.4.1/ httpd-2.4.2/srclib/apr-util
[root@localhost opt]# cd httpd-2.4.2/
[root@localhost httpd-2.4.2]# ls
ABOUT_APACHE BuildBin.dsp httpd.dsp Makefile.in ROADMAP
acinclude.m4 buildconf httpd.spec Makefile.win server
Apache-apr2.dsw CHANGES include modules srclib
Apache.dsw config.layout INSTALL NOTICE support
apache_probes.d configure InstallBin.dsp NWGNUmakefile test
ap.d configure.in LAYOUT os VERSIONING
build docs libhttpd.dsp README
BuildAll.dsp emacs-style LICENSE README.platforms
[root@localhost httpd-2.4.2]# ./configure --prefix=/usr/local/httpd --enable-deflate --enable-expires --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
configure: error: in `/opt/httpd-2.4.2/srclib/apr':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
configure failed for srclib/apr
6.9.4 没有安装编译器,安装编译器
[root@localhost httpd-2.4.2]# yum install gcc gcc-c++ zlib-devel pcre pcre-devel make perl expat-devel -y
[root@localhost httpd-2.4.2]# ./configure --prefix=/usr/local/httpd --enable-deflate --enable-expires --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
config.status: creating include/ap_config_auto.h
config.status: executing default commands
6.9.4 make编译
[root@localhost httpd-2.4.2]# make
make[4]: 离开目录“/opt/httpd-2.4.2/modules/mappers”
make[3]: 离开目录“/opt/httpd-2.4.2/modules/mappers”
make[2]: 离开目录“/opt/httpd-2.4.2/modules”
make[2]: 进入目录“/opt/httpd-2.4.2/support”
make[2]: 离开目录“/opt/httpd-2.4.2/support”
make[1]: 离开目录“/opt/httpd-2.4.2”
[root@localhost httpd-2.4.2]# make install
mkdir /usr/local/httpd/man
mkdir /usr/local/httpd/man/man1
mkdir /usr/local/httpd/man/man8
mkdir /usr/local/httpd/manual
make[1]: 离开目录“/opt/httpd-2.4.2”
6.9.5 优化配置文件和脚本文件,开启缓存时间模块
[root@localhost ~]# grep -v "#" /usr/local/httpd/bin/apachectl > /etc/init.d/httpd
[root@localhost ~]# vim /etc/init.d/httpd
//开头增加
#!/bin/sh
# chkconfig: 35 85 21
# description: Apache is a World Wide Web server
[root@localhost ~]# ln -s /usr/local/httpd/bin/* /usr/local/bin
[root@localhost ~]# ln -s /usr/local/httpd/conf/httpd.conf /etc/httpd.conf
[root@localhost ~]# vim /etc/httpd.conf
51 Listen 192.168.247.149:80
52 #Listen 80
188 ServerName www.kgc.com:80
108 LoadModule expires_module modules/mod_expires.so
//开启这个功能
489 <IfModule mod_expires.c>
490 ExpiresActive On
491 ExpiresDefault "access plus 50 seconds"
492 </IfModule>
//末尾添加以上四行
6.9.6 验证配置文件中的语法格式
[root@localhost ~]# apachectl -t
Syntax OK
//验证语法格式是否有误
[root@localhost ~]# apachectl -t -D DUMP_MODULES | grep "expires"
//查看模块
expires_module (shared)
6.9.7 修改首页属性,在里面添加文件
[root@localhost ~]# cd /usr/local/httpd/htdocs/
[root@localhost htdocs]# ls
index.html
[root@localhost htdocs]# vim index.html
<html><body><h1>It works!</h1>
<img src="bzhw.png"/>
</body></html>
[root@localhost htdocs]# mount.cifs //192.168.254.10/linuxs /abc
Password for root@//192.168.254.10/linuxs:
[root@localhost htdocs]# cd -
/abc
[root@localhost abc]# ls
bzhw.png
[root@localhost abc]# cp bzhw.png /usr/local/httpd/htdocs/
[root@localhost abc]# cd /usr/local/httpd/htdocs/
[root@localhost htdocs]# ls
bzhw.png index.html
6.9.8 关闭防火墙,开启服务
[root@localhost htdocs]# systemctl stop firewalld.service
[root@localhost htdocs]# setenforce 0
[root@localhost htdocs]# apachectl start
//启动服务
6.9.9 客户端开启fiddler,开始访问
备注:若是想要使网页识别中文,需要输入< meta charset=“utf-8”>标签
查看抓包工具,得到验证
6.9.10 修改缓存时间,重新启动服务,刷新客户端网页,去查看数据
[root@localhost htdocs]# vim /etc/httpd.conf
</IfModule>
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 30 seconds"
</IfModule>
[root@localhost htdocs]# apachectl restart
备注:
1.记得清除历史纪录
2.修改配置文件,需要重启服务
3.不支持systemctl 开启服务,可以使用service 开启服务
4.缓存的是静态数据,动态数据无法缓存
七:配置apache隐藏版本信息
7.1 apache的版本信息,透露了一定的漏洞信息,从而给网站带来安全隐患
7.2 生产环境中要配置apache隐藏版本信息
7.3 可使用Fiddler抓包工具分析
apache的版本信息,透露了一定的漏洞信息,从而给网站带来安全隐患
所以生产环境中要配置apache隐藏版本信息
7.4 配置apache隐藏版本信息
7.4.1 将主配置文件httpd.conf以下行注释去掉,开启子配置文件
- #Include conf/extra/httpd-default.conf
7.4.2 修改httpd-default.conf文件两个地方
7.4.3 将ServersSignature On 修改为ServersSignature Off
7.5 重启httpd服务,访问网站,抓包测试
7.6 实验验证
7.6.1 在缓存时间的实验基础上开启额外子配置文件功能
[root@localhost httpd-2.4.29]# vim /usr/local/httpd/conf/httpd.conf
490 Include conf/extra/httpd-default.conf
7.6.2 修改子配置文件
[root@localhost httpd-2.4.29]# cd /usr/local/httpd/conf/
[root@localhost conf]# ls
extra httpd.conf magic mime.types original
[root@localhost conf]# vim extra/httpd-default.conf
55 ServerTokens Prod
65 ServerSignature Off
7.6.3 在未重新启动服务时,版本信息是显示的
7.6.4 重启服务,刷新网页,发现看不见了
备注:systemctl restart httpd失败,需要先stop ,然后再start
或者apache restart 可以执行
八:配置apache实现防盗链
防盗链就是防止别人的网站代码里面盗用服务器的图片、文件、视频等相关资源
如果别人盗用网站的这些静态资源,明显的是会增大服务器的带宽压力
所以作为网站的维护人员,要杜绝我们服务器的静态资源被其他网站盗用
8.1 使用两台主机模拟盗链
- 两台主机的配置与功能如下
8.2 盗链模拟步骤
- 两台主机配置测试页面
- 盗链网站的测试网页page盗用源主机page/image的一个logo.ipg文件
- 在Windows中访问httpd://a.tet2.com/pafe.html,并用Fiddler抓包工具的查看效果图
8.3 检查apache是否安装了mod_rewrite模块
- usr/local/apache/bin/apachectl -t -D DUMP_MODULES
- 如果输出中没有rewrite_module(static),则说明编译时没有安装mod_rewrite模块
8.4 如果没有安装则要重新编译安装
- ./configure --enable-rewrite
- make && make install
8.5 配置规则变量说明
- %{HTTPD_REFERER}:浏览header中的链接字段,存放一个链接的URL,代表是从哪个链接访问所需的网页
- !^:不以后面的字符串开头
- .$:以任意字符结尾
- NC:不区分大小写
- R:强制跳转
8.6 规则匹配说明
- RewriteEngine On :打开网页重写功能
- RewriteCond : 设置匹配规则
- RewriteRule :设置跳转动作
8.7 规则匹配
- 如果相应变量的值匹配所设置的规则,则逐条往下处理;如果不匹配,则往后的规则不再匹配
8.8 配置操作演示
8.8.1 修改配置启用防盗链功能并设置规则:
- RewriteEngine On
- RewriteCond %{HTTP_REFERER} !^h ttp://test.com/.$ [NC]
- RewriteCond %{HTTP_REFERER} !^h ttp://test.com$ [NC]
- RewriteCond %{HTTP_REFERER} !^h ttp://ww w.test.com/.$ [NC]
- RewriteCond %{HTTP_REFERER} !^h ttp://ww w.test.com$ [NC]
- RewriteRule .* \ .(gif|jpg|swf)$ ht tp://ww w.test.com/error.html [R,NC]
8.9 实验演示
8.9.1 挂载,解压文件
[root@localhost ~]# mkdir /abc
[root@localhost ~]# mount.cifs //192.168.254.10/linuxs /abc
Password for root@//192.168.254.10/linuxs:
[root@localhost ~]# cd /abc/LAMP-C7/
[root@localhost LAMP-C7]# ls
apr-1.6.2.tar.gz httpd-2.4.29.tar.bz2 php-5.6.11.tar.bz2
apr-util-1.6.0.tar.gz LAMP-php5.6.txt
Discuz_X2.5_SC_UTF8.zip mysql-5.6.26.tar.gz
[root@localhost LAMP-C7]# tar zxvf apr-1.6.2.tar.gz -C /opt
[root@localhost LAMP-C7]# tar zxvf apr-util-1.6.0.tar.gz -C /opt
[root@localhost LAMP-C7]# tar xjvf httpd-2.4.29.tar.bz2 -C /opt
8.9.2 修改文件
[root@localhost LAMP-C7]# cd /opt
[root@localhost opt]# ls
apr-1.6.2 apr-util-1.6.0 httpd-2.4.29 rh
[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]# ls
httpd-2.4.29 rh
8.9.3安装编译包
[root@localhost opt]# yum install gcc gcc-c++ perl pcre pcre-devel expat-devel zlib-devel make -y
已安装:
expat-devel.x86_64 0:2.1.0-10.el7_3 gcc.x86_64 0:4.8.5-39.el7
gcc-c++.x86_64 0:4.8.5-39.el7 pcre-devel.x86_64 0:8.32-17.el7
zlib-devel.x86_64 0:1.2.7-18.el7
作为依赖被安装:
cpp.x86_64 0:4.8.5-39.el7
glibc-devel.x86_64 0:2.17-292.el7
glibc-headers.x86_64 0:2.17-292.el7
kernel-headers.x86_64 0:3.10.0-1062.9.1.el7
libmpc.x86_64 0:1.0.1-3.el7
libstdc++-devel.x86_64 0:4.8.5-39.el7
更新完毕:
make.x86_64 1:3.82-24.el7 perl.x86_64 4:5.16.3-294.el7_6
作为依赖被升级:
glibc.x86_64 0:2.17-292.el7 glibc-common.x86_64 0:2.17-292.el7
libgcc.x86_64 0:4.8.5-39.el7 libgomp.x86_64 0:4.8.5-39.el7
libstdc++.x86_64 0:4.8.5-39.el7 perl-libs.x86_64 4:5.16.3-294.el7_6
zlib.x86_64 0:1.2.7-18.el7
完毕!
8.9.4 配置apache参数,配置开启功能
[root@localhost httpd-2.4.29]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi --enable-deflate --enable-expires --enable-mods-shared=most --with-mpm=worker
configure: summary of build options:
Server Version: 2.4.29
Install prefix: /usr/local/httpd
C compiler: gcc -std=gnu99
CFLAGS: -g -O2 -pthread
CPPFLAGS: -DLINUX -D_REENTRANT -D_GNU_SOURCE
LDFLAGS:
LIBS:
C preprocessor: gcc -E
或者这种版本
[root@localhost httpd-2.4.29]# ./configure --prefix=/usr/local/httpd --enable-so --enable-deflate --enable-rewrite --enable-cgi --enable-charset-lite
configure: summary of build options:
Server Version: 2.4.29
Install prefix: /usr/local/httpd
C compiler: gcc -std=gnu99
CFLAGS: -g -O2 -pthread
CPPFLAGS: -DLINUX -D_REENTRANT -D_GNU_SOURCE
LDFLAGS:
LIBS:
C preprocessor: gcc -E
8.9.5 make 安装
[root@localhost httpd-2.4.29]# make && make install
mkdir /usr/local/httpd/man
mkdir /usr/local/httpd/man/man1
mkdir /usr/local/httpd/man/man8
mkdir /usr/local/httpd/manual
make[1]: 离开目录“/opt/httpd-2.4.29”
8.9.6 优化相关脚本和主配置文件
[root@localhost httpd-2.4.29]# ln -s /usr/local/httpd/conf/httpd.conf /etc/httpd.conf
[root@localhost httpd-2.4.29]# ln -s /usr/local/httpd/bin/* /usr/local/bin/
[root@localhost httpd-2.4.29]# ln -s /usr/local/httpd/bin/apachectl /etc/init.d/httpd
[root@localhost httpd-2.4.29]#
[root@localhost httpd-2.4.29]# ls -l /etc/init.d/httpd
lrwxrwxrwx. 1 root root 30 12月 17 18:22 /etc/init.d/httpd -> /usr/local/httpd/bin/apachectl
localhost httpd-2.4.29]# vim /etc/init.d/httpd
1 #!/bin/sh
2 # chkconfig: 35 85 21
3 # description: Apache is a World Wide Web server
[root@localhost httpd-2.4.29]# chkconfig --add httpd
[root@localhost httpd-2.4.29]# chkconfig --list httpd
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。
要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。
httpd 0:关 1:关 2:关 3:开 4:关 5:开 6:关
8.9.7 先不开启重写功能,测试盗链效果
[root@localhost httpd-2.4.29]# vim /etc/httpd.conf
51 Listen 192.168.247.149:80
52 #Listen 80
198 ServerName www.kgc.com:80
[root@localhost httpd-2.4.29]# cp /abc/bzhw.png /usr/local/httpd/htdocs/
[root@localhost httpd-2.4.29]# cd /usr/local/httpd/htdocs/
[root@localhost htdocs]# ls
bzhw.png index.html
[root@localhost htdocs]# vim index.html
<html><body><h1>It works!</h1>
<img src="bzhw.png"/>
</body></html>
[root@localhost htdocs]# systemctl stop firewalld.service
[root@localhost htdocs]# setenforce 0
[root@localhost htdocs]#
[root@localhost htdocs]# systemctl start httpd
Warning: httpd.service changed on disk. Run 'systemctl daemon-reload' to reload units.
[root@localhost htdocs]# systemctl daemon-reload
[root@localhost htdocs]# systemctl start httpd
[root@localhost htdocs]#
8.9.8 客户端登陆
8.9.9 配置盗机:
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]#
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
Listen 192.168.247.160:80
#Listen 80
Name www.accp.com:80
[root@localhost ~]# cd /var/www/
[root@localhost www]# ls
cgi-bin html
[root@localhost www]# cd html/
[root@localhost html]# ls
[root@localhost html]# vim index.html
[root@localhost ~]# systemctl start httpd.service
在服务端配置dns服务,以便盗机和客户端解析
否则在盗链主机处不能输入域名
配置步骤就不详述了,之前的博客有介绍
[root@localhost htdocs]# yum install bind -y
[root@localhost htdocs]# vim /etc/named.conf
[root@localhost htdocs]# vim /etc/named.rfc1912.zones
[root@localhost htdocs]# cd /var/named/
[root@localhost named]# ls
data dynamic named.ca named.empty named.localhost named.loopback slaves
[root@localhost named]# cp -p named.localhost kgc.com.zone
[root@localhost named]# vim kgc.com.zone
[root@localhost named]# systemctl start named
备注:防火墙记得关
盗机配置:
[root@localhost html]# echo "nameserver 192.168.247.149" > /etc/resolv.conf
[root@localhost html]# nslookup www.kgc.com
Server: 192.168.247.149
Address: 192.168.247.149#53
Name: www.kgc.com
Address: 192.168.247.149
[root@localhost html]# vim index.html
<html><body><h1>It is daoji</h1>
<img src="http://www.kgc.com/bzhw.png"/>
</body></html>
[root@localhost html]# systemctl restart httpd
再次查看,发现图已被盗
8.9.10这时管理员发现自己的图被盗了,要补救一下,开启防盗链功能
[root@localhost named]# vim /etc/httpd.conf
156 LoadModule rewrite_module modules/mod_rewrite.so
在htdocs目录参数配置中加入配置
[root@localhost named]# vim /etc/httpd.conf
223 <Directory "/usr/local/httpd/htdocs">
248 Require all granted
249 RewriteEngine On
250 RewriteCond %{HTTP_REFERER} !^http://kgc.com/.*$ [NC]
251 RewriteCond %{HTTP_REFERER} !^http://kgc.com$ [NC]
252 RewriteCond %{HTTP_REFERER} !^http://www.kgc.com/.*$ [NC]
253 RewriteCond %{HTTP_REFERER} !^http://www.kgc.com/$ [NC]
254 RewriteRule .*\.(gif|jpg|swf|png)$ http://www.kgc.com/error.png
255 </Directory>
在/usr/local/httpd/htdocs/中,添加error.png文件
[root@localhost named]# cp /abc/error.png /usr/local/httpd/htdocs/
[root@localhost named]# cd /usr/local/httpd/htdocs/
[root@localhost htdocs]# ls
bzhw.png error.png index.html
[root@localhost htdocs]#
[root@localhost htdocs]# apachectl -t
Syntax OK
[root@localhost htdocs]# apachectl -t -D DUMP_MODULES | grep "rewrite"
rewrite_module (shared)
8.9.11 重启服务
[root@localhost bin]# apachectl stop
[root@localhost bin]# apachectl start
可以发现盗机无法再访问到我方的相关图片