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 中
如果报错:
原因是缺少 zlib-devel 的安装包,装上就可以了。
修改 Apache 配置文件开启 gzip 压缩传输
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
打开 httpd.conf 后,先将上面两行配置前面的#号去掉,这样 apache 就会启用这两个模块
这个非常有用的优化,mod_expires 可以减少 20-30%左右的重复请求,让重复的用户对指定的页面请求结果都 CACHE 在本地,根本不向服务器发出请求。但要注意更新快的文件不要这么做.
不启用mod_expires:
启用 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>
将 Options Indexes FollowSymLinks
中的 Indexes 去掉,就可以禁止 Apache 显示该目录结构。
Indexes 的作用就是当该目录下没有 index.html 文件时,就显示目录结构。
主配置中启用 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 测试
如果你需要彻底将版本之类的信息进行改头换面,你就需要在编译之前做准备或者进行从新编译了。在重新编译时,修改源码包下 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 #
上述列出的行,已经给出了注释,大家可以修改自己想要的
随着网站的访问越来越大,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