在企业中,部署Apache后只采用默认的配置参数,会引发网站很多问题,换言之默认配置是针对以前较低的服务器配置的,以前的配置已经不适用当今互联网时代
为了适应企业需求,就需要考虑如何提升Apache的性能与稳定性,这就是Apache优化的内容
配置Apache的网页压缩功能,是使用gzip压缩算法来对网页内容进行压缩后再传输到客户端浏览器,其作用
Apache实现网页压缩的功能模块包括
Apache 1.X没有内建网页压缩技术,但可使用第三方mod_gzip 模块执行压缩
Apache 2.X在开发的时候,内建了mod_deflate这个模块,取代mod_gzip
mod_gzip 模块与mod_deflate 模块,两者均使用gzip压缩算法,运作原理类似
启动网页压缩功能步骤
查看是否安装mod_deflate模块→修改配置文件启用压缩功能→访问测试
检查是否已安装mod_deflate模块
执行apachectl -t -D DUMP_ MODULES命令
如果输出中没有deflate_ module (static), 说明编译时没有安装mod_deflate模块
若没有安装,则要重新编译安装
./configure --enable-deflate
make && make install
在配置httpd.conf中配置开启gzip功能
重启Apache服务,再用浏览器访问测试网站
在浏览器中选择“查看元素”可以看到有"Accept-Encoding:gzip"表示压缩已经生效
手工编译安装Apache服务
[root@localhost httpd]# tar zxvf apr-1.6.2.tar.gz
[root@localhost httpd]# tar zxvf apr-util-1.6.0.tar.gz
[root@localhost httpd]# tar jxvf httpd-2.4.29.tar.bz2
[root@localhost httpd]# mv apr-1.6.2 httpd-2.4.29/srclib/apr
[root@localhost httpd]# 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
[root@localhost opt]# cd httpd-2.4.29/
[root@localhost httpd-2.4.29]# ./configure \
> --prefix=/usr/local/httpd \ #指定路径
> --enable-so \ #开启核心功能模块
> --enable-rewrite \ #开启重写功能,如防盗链保护
> --enable-charset-lite \ #开启字符集
> --enable-cgi \ #开启通用网关接口
> --enable-deflate #开启deflate压缩模块
[root@localhost httpd-2.4.29]# make && make install
[root@localhost httpd-2.4.29]# ln -s /usr/local/httpd/conf/httpd.conf /etc/httpd.conf
#创建软连接方便管理
编辑配置文件
[root@localhost httpd-2.4.29]# vim /etc/httpd.conf
Listen 192.168.110.10:80
#Listen 80
ServerName www.aaa.com:80
...
LoadModule headers_module modules/mod_headers.so #这三条全部开启
LoadModule deflate_module modules/mod_deflate.so
LoadModule filter_module modules/mod_filter.so
...
<IfModule mod_deflate.c> #在末尾加入
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascrip text/jpg text/png
DeflateCompressionLevel 9
SetOutputFilter DEFLATE
IfModule>
[root@localhost httpd-2.4.29]# /usr/local/httpd/bin/httpd -t
#使用apachectl工具检查是否配置正确
Syntax OK
启动服务
[root@localhost httpd-2.4.29]# setenforce 0
[root@localhost httpd-2.4.29]# iptables -F
[root@localhost httpd-2.4.29]# /usr/local/httpd/bin/httpd #开启服务
[root@localhost httpd-2.4.29]# netstat -natp | grep 80
tcp 0 0 192.168.110.10:80 0.0.0.0:* LISTEN 44071/httpd
[root@localhost httpd-2.4.29]# cd /usr/local/httpd/bin/
[root@localhost bin]# ./apachectl -t -D DUMP_MODULES |grep "deflate" #查看模块
deflate_module (shared)
验证网页压缩功能
[root@localhost htdocs]# ls #添加一张名为b的图片
index.html b.jpg
[root@localhost htdocs]# vim index.html
<html><body><h1>It works!h1>
<img src="b.jpg"/>
[root@localhost bin]# ./apachectl stop
[root@localhost bin]# ./apachectl start
在Windows10中安装fiddler软件
使用fiddler工具抓包
支持压缩
通过mod_ expire模块配置Apache, 使网页能在客户端浏览器缓存一段时间,以避免重复请求
启用mod_ expire模块后,会自动生成页面头部信息中的Expires标签和Cache-Control标签,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 60 seconds"
IfModule>
配置Apache服务增加缓存功能
[root@localhost httpd-2.4.29]# ./configure \
--enable-expires
编辑配置文件
[root@localhost opt]# vim /etc/httpd.conf
LoadModule expires_module modules/mod_expires.so #开启模块
...
<IfModule mod_expires.c> #配置文件末尾添加
ExpiresActive On
ExpiresDefault "access plus 50 seconds" #设置缓存时间50秒
IfModule>
进行测试
[root@localhost opt]# cd /usr/local/httpd/bin/
[root@localhost bin]# ./apachectl -t #测试配置文件是否正确
Syntax OK
[root@localhost bin]# ./apachectl -t -D DUMP_MODULES | grep "expires" 查看模块
expires_module (shared)
[root@localhost bin]# ./apachectl restart #重启Apache服务
防盗链是防止别人的网站代码里面盗用我们自己服务器上的图片、文件、视频等相关资源
如果别人盗用网站的这些静态资源,明显的是会增大服务器的带宽压力
作为网站的维护人员,要杜绝服务器的静态资源被其他网站盗用
检查Apache是否安装了mod_rewrite模块
/usr/local/apache/bin/apachectl -t -D DUMP_MODULES
如果输出中没有rewrite_module(static),则说明编译时没有安装mod_rewrite模块
若没有安装则需要重新编译安装
/configure --enable-rewrite
make && make install
配置DNS服务
[root@localhost ~]# yum -y install bind
[root@localhost ~]# vim /etc/named.conf
options {
listen-on port 53 { any;};
...省略内容
allow-query { any; };
[root@localhost ~]# vim/etc/named.rfc1912.zones
zone "aaa.com" IN {
type master;
file "aaa.zone";
allow-update { none; };
};
[root@localhost ~]# cd /var/named/
[root@localhost named]# cp -p named.localhost aaa.com.zone
[root@localhost named]# vim aaa.com.zone
www IN A 192.168.110.10
[root@localhost named]#vim /usr/local/httpd/htdocs/index.html
<html><body><h1>It works!h1>body>html>
<img src="b.jpg">
[root@localhost named]# iptables -F
[root@localhost named]# setenforce 0
[root@localhost named]# systemctl start named
[root@csdn ~]# iptables -F
[root@csdn ~]# setenforce 0
[root@csdn ~]# yum install httpd -y
[root@csdn ~]# vim /etc/httpd/conf/httpd.conf
Listen 192.168.110.15:80
#Listen80
ServerName www.bbb.com: 80
[root@csdn ~]# cd /var/www/html/
[root@csdn html]# vim index.html
<h1>bbbh1>
<img src="http://www.aaa.com/b.jpg"/> #指向源服务器的图片
[root@csdn html]# systemctl start httpd.service
开启防盗链服务
[root@localhost bin]# vim /etc/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so #去掉注释
.....省略内容
RewriteEngine On #添加此6行内容
RewriteCond %{HTTP_REFERER}!^http://aaa.com/.*$ [NC]
RewriteCond %{HTTP_REFERER}!^http://aaa.com$ [NC]
RewriteCond %{HTTP_REFERER}!^http://www.aaa.com/.*$ [NC]
RewriteCond %{HTTP_REFERER}!^http://www.aaa.com/$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.aaa.com/q.jpg
Directory>
[root@localhost bin]# cd /usr/local/httpd/htdocs/
[root@localhost htdocs]# ls
b.png index.html q.jpg #添加配置文件中的q图片
[root@localhost htdocs]# cd ..
[root@localhost httpd]# cd bin
[root@localhost bin]# ./apachectl stop
[root@localhost bin]# ./apachectl start
Apache的版本信息,透露了一定的漏洞信息,从而给网站带来安全隐患
工作中要配置Apache隐藏版本信息
将主配置文件httpd.confl以下行注释去掉
#Include conf/extra/httpd-default.conf
修改httpd-default.conf文件
Server Tokens Full修改为Server Tokens Prod
[root@localhost bin]# vim /etc/httpd.conf
...
Include conf/extra/httpd-default.conf #将此行注释去掉
[root@localhost bin]# cd /usr/local/httpd/conf/extra
[root@localhost extra]# vim httpd-default.conf
ServerTokens Prod #Server Tokens Full修改为Server Tokens Prod
[root@localhost extra]# cd /usr/local/httpd/bin/
[root@localhost bin]# ./apachectl stop
[root@localhost bin]# ./apachectl start