首页 > 代码库 > Linux课程笔记 Apache的优化

Linux课程笔记 Apache的优化

Apache服务优化

 

1 配置Apache日志轮询

apache自带的日志轮询工具也是可以使用的,但是老师测试会丢日志,所以采用cronolog来配置日志轮询

 

tar zxf cronolog-1.6.2.tar.gz

cd cronolog-1.6.2

./configure 

make 

make install

<VirtualHost *:80>

    ServerAdmin qinbf@etiantian.com

    DocumentRoot "/var/html/www"

    ServerName www.etiantian.com

    ServerAlias etiantian.com

    ErrorLog "logs/www.etiantiancom-error_log"

   # CustomLog "logs/www.etiantiancom-access_log" common

CustomLog "|/usr/local/sbin/cronolog /application/apache/logs/access_www_%w.log" combined

#注意这里要写全路径,%w表示按周轮询

</VirtualHost>

 

2 错误页面优雅显示

[root@test3 bin]# grep "ErrorDocument 404" /application/apache/conf/httpd.conf

#ErrorDocument 404 /missing.html

#ErrorDocument 404 "/cgi-bin/missing_handler.pl"

#可以指定404错误提示的页面,可以是URL,也可以是脚本或者文件

 

3 mod_deflate文件压缩功能

3.1 mod_deflate模块介绍

mod_deflate模块提供了DEFLATE输出过滤器,允许服务器在将输出内容发送到客户端之前进行压缩,提升用户体验。

 

3.2 mod_deflate安装检查

(1) 编译安装httpd情况时是否已经安装mod_deflate,命令为:

[root@test3 ~]# /application/apache/bin/apachectl -l |grep mod_deflate

  mod_deflate.c

(2) 如果是以DSO方式编译的(--enable-so开启DSO编译方式),则查看方法为:

[root@test3 ~]# ls /application/apache/modules/ |grep mod_deflate

mod_deflate.so

[root@test3 ~]# grep mod_deflate.so /application/apache/conf/httpd.conf

LoadModule  deflate_module  modules/mod_deflate.so

[root@test3 ~]# /application/apache/bin/apachectl -M |grep deflate

 deflate_module(dynamic)  #static是表示在编译的时候就已经安装了

Syntax OK

特别说明:以上两种情况不能同时存在,否则会有冲突

 

3.3 mod_deflate安装

cd  /root/tools/httpd-2.2.25/modules/filters

/application/apache/bin/apxs -c -a -i mod_deflate.c

ll /application/apache/modules/mod_deflate.so

 

#如果提示冲突,要把/application/apache/conf/httpd.conf文件中,LoadModule  deflate_module  modules/mod_deflate.so这句命令注释掉。

 

3.4 mod_deflate应用

<ifmodule mod_deflate.c>

DeflateCompressionLevel  9

SetOutputFilter DEFLATE

DeflateFilterNote  Input  instream

DeflateFilterNote  Output  outstream

DeflateFilterNote  Ratio  ratio

#Logformat  ‘  “%r”  %{outstream}n/%{instream}n  (%{ratio}n%%)’ deflate

#CustomLog  logs/deflate_log.log deflate

</ifmodule>

 

#把以上这段代码嵌入到/application/apache/conf/extra/httpd-vhosts.conf的/var/html/www配置内容里面(也可以配置到全局目录里面)

 

<VirtualHost *:80>

    ServerAdmin qinbf@etiantian.com

    DocumentRoot "/var/html/www"

    ServerName www.etiantian.com

    ServerAlias etiantian.com

    ErrorLog "logs/www.etiantiancom-error_log"

    CustomLog "logs/www.etiantiancom-access_log" common

   <ifmodule mod_deflate.c>

        DeflateCompressionLevel  9

        SetOutputFilter DEFLATE

        DeflateFilterNote  Input  instream

        DeflateFilterNote  Output  outstream

        DeflateFilterNote  Ratio  ratio

        #Logformat  ‘  “%r”  %{outstream}n/%{instream}n  (%{ratio}n%%)’ deflate

        #CustomLog  logs/deflate_log.log deflate

   </ifmodule>

 

</VirtualHost>

 

 

测试:把老师的test_deflate.tar.gz压缩包上传到/var/html/www下,然后解压,不需要做任何移动。打开Firefox开发专版,访问192.168.1.4/test/deflate.html,打开firebug,在YSlow中可以看到测试结果。

 技术分享

 

 

 

4 mod_expires缓存功能

Expire其实就是通过header报文来指定特定类型的文件在浏览器中的缓存时间。大多数的图片,flash在发布后都不是需要经常修改的,做了缓存以后这样的浏览器以后就不需要再从服务器下载这些文件而是直接从缓存中读取,这样再访问页面的速度会大大加快。

 

在刚才的mod_deflate模块配置内容下面加入以下配置:

ExpiresActive on

ExpiresDefault "access plus 12 month"

ExpiresByType text/html "access plus 12 months"

ExpiresByType text/css "access plus 12 months"

ExpiresByType image/gif "access plus 12 months"

ExpiresByType image/jpeg "access plus12  12 months"

ExpiresByType image/jpg "access plus 12 months"

ExpiresByType image/png "access plus 12 months"

EXpiresByType application/x-shockwave-flash "access plus 12 months"

EXpiresByType application/x-javascript "access plus 12 months"

ExpiresByType video/x-flv "access plus 12 months"

[root@test3 www]# curl -I 192.168.1.4/01.jpg

HTTP/1.1 200 OK

Date: Sun, 17 Nov 2013 03:51:45 GMT

Server: Apache/2.2.25 (Unix) DAV/2 PHP/5.3.10

Last-Modified: Sun, 07 Nov 2010 12:20:20 GMT

ETag: "40904-486f3-4947587f66900"

Accept-Ranges: bytes

Content-Length: 296691

Cache-Control: max-age=31104000

Expires: Wed, 12 Nov 2014 03:51:45 GMT

Vary: Accept-Encoding

Content-Type: image/jpeg

 

5 更改Apache默认用户

创建一个用户例如Apache(最好起一个不常用的名字),用于子进程和子线程。

useradd  -M  -s /sbin/nologin  apache

vi  /application/apache/conf/httpd.conf

User  apache

Group  apache

6  worker模式提升并发数

 

7  屏蔽apache版本等敏感信息

(1) 修改httpd.conf文件,打开httpd-default.conf模块

(2) 修改httpd-default.conf文件,ServerSignature Off以及ServerTokens Prod之后apachectl graceful使设置生效

 

8 apache目录文件权限设置(root,目录755,文件644)

[root@test3 html]# ll

总计 12

drwxr-xr-x 2 root root 4096 09-03 18:51 bbs

drwxr-xr-x 5 root root 4096 11-12 01:53 blog

drwxr-xr-x 3 root root 4096 11-17 11:43 www

提示:在网站架构中,应把资源文件,包括用户上传的图片,福建等和程序分离,最好把上传程序也分离,这样就可以从容授权了。

 

9 开启httpd-mpm.conf增加连接数

 

10 apache防盗链功能

 

11 禁止目录Index

Option  FollowSymLinks 这一个参数去掉Index选项

 

12 禁止用户覆盖(重载)

AllowOverride None  #禁止用户覆盖(重载)

#加快服务器速度,因为它不再为每个请求寻找每个目录访问控制问价(.htaccess)

 

13 关闭CGI

ScriptAlias /cgi-bin/ "/application/apache2.2.25/cgi-bin/"

<Directory "/application/apache2.2.25/cgi-bin">

    AllowOverride None

    Options None

    Order allow,deny

    Allow from all

</Directory>

删除以上内容

 

14 避免使用.htaccess文件(分布式配置文件)

首先从性能上,就应该避免使用.htaccess文件

 

15 apache安装模块

(mod_evasive20防DDOS、mod_limitipconn(针对单站点)配置、mod_security防SQL注入等

makejail   http://www.floc.net/makejail

是一个自动把建立jail所需要的程序放到jail内的软件

mod_security   http://www.modsecurity.org

是apache的一个模块,他有请求过滤,日志审计等功能,可以防止SQL Injection,跨站脚本攻击,很不错的一个模块

 

16 正确途径取得源代码,勤打apache补丁

 

17 apache日志授予root700权限

chown  -R root.root logs

chmod  -R 700 logs 

 

18 系统内核参数优化

 

19 禁止PHP解析指定站点目录

 

20 使用tmps文件系统替代频繁访问的目录

 

21 尽可能减少HTTP请求数

 

22 使用CDN做网站加速

 

23 apache程序架构优化

1) 程序页面服务器  2)图片附件服务器  3)上传服务器  三者的功能尽量分离

a) 分离最佳方式是分别使用独立的服务器(需要程序支持)

b) 次选方案在前端负载均衡器通过haproxy/nginx根据目录或扩展名请求后面对应的服务器

Linux课程笔记 Apache的优化