写完一篇apache深度优化,希望能帮到你

前言:

  • 开启 apache 的 Gzip(deflate)功能
  • 配置 mod_expires 模块
  • Apache 禁止目录遍历
  • Apache隐藏版本信息
  • Apache日志切割
  • 配置防盗链

开启 apache 的 Gzip(deflate)功能

gzip 可以极大的加速网站,有时压缩比率高到 80%,最少都有 40%以上,还是相当不错的。 在 Apache2 之后的版本,模块名不叫 gzip,而叫 mod_deflate

如果要开启 deflate 的话,一定要打开下面二个模块:
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so

设置压缩比率,取值范围在 1(最低) 到 9(最高)之间,不建议设置太高,虽然有很高的压缩率,但是占用更多的 CPU 资源.

mod_deflate 模块检查及安装

[root@www ~]# /usr/local/http-2.4.23/bin/apachectl -M | grep deflate
deflate_module (shared)

如果没有安装:

a.编译时安装方法
编译的时候跟上–enable-deflate 即可实现安装

b.DSO 方式安装

[root@www ~]# cd /root/http-2.4.23/modules/filters/ #切到 apache 源码包 mod_deflate 所在
的目录下
/usr/local/http-2.4.23/bin/apxs -c -i -a mod_deflate.c  #以 dso 的方式编译安装到 apache 中
/usr/local/http2.2/bin/apxs -c -i -a /root/http-2.2.17/modules/metadata/mod_headers.c  #以dso 的方式编译安装到 apache 中

如果报错:
写完一篇apache深度优化,希望能帮到你_第1张图片
原因是缺少 zlib-devel 的安装包,装上就可以了。
修改 Apache 配置文件开启 gzip 压缩传输

LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so

打开 httpd.conf 后,先将上面两行配置前面的#号去掉,这样 apache 就会启用这两个模块

配置 mod_expires 模块

这个非常有用的优化,mod_expires 可以减少 20-30%左右的重复请求,让重复的用户对指定的页面请求结果都 CACHE 在本地,根本不向服务器发出请求。但要注意更新快的文件不要这么做.

不启用mod_expires:
写完一篇apache深度优化,希望能帮到你_第2张图片
启用 expires_module:
LoadModule expires_module modules/mod_expires.so
然后添加 Expires 配置规则:

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "now plus 1 month"
ExpiresByType application/x-javascript "now plus 5 day"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/bmp "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 month"
ExpiresByType image/png "access plus 1 minute"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresDefault "now plus 0 minute"
</IfModule>

写完一篇apache深度优化,希望能帮到你_第3张图片

Apache 禁止目录遍历

Options Indexes FollowSymLinks中的 Indexes 去掉,就可以禁止 Apache 显示该目录结构。
Indexes 的作用就是当该目录下没有 index.html 文件时,就显示目录结构。

apache 隐藏版本信息

主配置中启用 httpd-default.conf
Include conf/extra/httpd-default.conf
修改 /usr/local/http-2.4.23/conf/extra/httpd-default.conf

找到
ServerTokens Full
ServerSignature On
改成
ServerTokens Prod
ServerSignature Off

重启 apache 测试

写完一篇apache深度优化,希望能帮到你_第4张图片
如果你需要彻底将版本之类的信息进行改头换面,你就需要在编译之前做准备或者进行从新编译了。在重新编译时,修改源码包下 include 目录下的 ap_release.h文件

#define AP_SERVER_BASEVENDOR “Apache Software Foundation” #服务的供应商名称

#define AP_SERVER_BASEPROJECT “Apache HTTP Server” #服务的项目名称

#define AP_SERVER_BASEPRODUCT “Apache” #服务的产品名

#define AP_SERVER_MAJORVERSION_NUMBER 2 #主要版本号

#define AP_SERVER_MINORVERSION_NUMBER 4 #小版本号

#define AP_SERVER_PATCHLEVEL_NUMBER 23 #补丁级别

#define AP_SERVER_DEVBUILD_BOOLEAN 0 #

上述列出的行,已经给出了注释,大家可以修改自己想要的

Apache 日志切割

随着网站的访问越来越大,WebServer 产生的日志文件也会越来越大,如果不对日志进行分割,那么只能一次将大的日志(如 Apache 的日志)整个删除,这样也丢失了很多对网站比较宝贵的信息,因为这些日志可以用来进行访问分析、网络安全监察、网络运行状况监控等。

使用 rotatelogs(apache 自带的工具)每隔一天记录一个日志

编辑 Apache 的主配置文件,注释掉以下两行:

#ErrorLog logs/error_log

#CustomLog logs/access_log common
然后添加如下两行

ErrorLog "|/usr/local/http-2.4.23/bin/rotatelogs -l logs/error_%Y%m%d.log 86400"
CustomLog "|/usr/local/http-2.4.23/bin/rotatelogs -l logs/access_%Y%m%d.log 86400" combined
注:其中 86400 为轮转的时间单位为秒

查看验证
在这里插入图片描述

配置防盗链

Apache 防盗链可以用 rewrite 实现。
首先要确认 Apache 的 rewrite module 可用
打开 httpd.conf,确保有这么一行配置:
LoadModule rewrite_module modules/mod_rewrite.so

然后在找到自己网站对应的配置的地方(如在主配置文件中或虚拟主机中),加入下列代码:

vim /usr/local/http-2.4.23/conf/httpd.conf 
.....
ServerName www.benet.com
#防盗链配置
RewriteEngine On  #启用 rewrite,要想 rewrite 起作用,必须要写上
RewriteCond %{HTTP_REFERER} !^$ #允许空“HTTP_REFERER”的访问
RewriteCond %{HTTP_REFERER} !^http://benet.com/.*$ [NC] #设置允许访问的 HTTP 来源,包括网站自身。
RewriteCond %{HTTP_REFERER} !^http://benet.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.benet.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.benet.com$ [NC]
RewriteRule .*\.(gif|jpg|swf)$http://www.benet.com/about/nolink.png[R,NC,L]' #将不满足 referer 条件的访问重定向至 nolink.png。
.....
	}

注:

(1)%{HTTP_REFERER}:服务器变量,HTTPReferer 是 header 的一部分,当浏览器向 web服务器发送请求的时候,一般会带上 Referer,告诉服务器我是从哪个页面链接过来的,服务器藉此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从 HTTP Referer 中统计出每天有多少用户点击我主页上的链接访问他的网站。

(2)[ NC]指的是不区分大小写,[R]强制重定向 redirect

你可能感兴趣的:(写完一篇apache深度优化,希望能帮到你)