Apache的常用配置

 

Apache采用IBM HTTPServer,内核为Apache/2.0.47

Server version: IBM_HTTP_Server/6.1.0.13 Apache/2.0.47

 

查看IBM HTTPServer的版本的命令

apache.exe -V    

./apachectl -V 4

 

:IBM HTTPServer是包装Apache后增强了部分功能

普通Apache下的版本查看命令

./apachectl v

若新配置Apache,建议安装最新版本的Apache

目前最新版本:2.2.26,可用Apache网站提供源码在linux下进行编译

最新window的安装包:2.2.25

:Apache已经推出2.4的版本,对静态内容响应比2.2的版本快。

 

主要针对以下变更 

1、 trace方法的漏洞

2、 定义了404403错误显示页面,代替了原来的默认页面

3、 取消了apache的返回显示签名,取消错误页面时的版本显示。

4、 取消的目录内容列出的配置。

5、 Apache的内容输出压缩配置。

6、 Apachestatus监控时默认地址的修改。

7、 Apache虚拟主机配置

8、 Apache默认的线程数的调整 含windowlinux

9、 Apache循环日志的设置

10、 LinuxApache日志定时清除设置

11、 Apache的默认参数修改

12、 Apacheproxy功能启用

13、 Apache的缓存功能设置

 

在安装apache后,需要对默认配置进行修改,以增强一下默认的安全性配置。

每个详细的配置过程如下:

1、 针对Apache 2.0.55以前的版本,需要进行如下修改

放开rewrite模块

   LoadModule rewrite_module modules/mod_rewrite.so

  

   增加如下配置

        RewriteCond %{REQUEST_METHOD} ^TRACE

        RewriteRule .* - [F]

 

   若是Apache 2.0.55版本以上的apache,则需在http.conf中增加如下配置

TraceEnable Off

2、 定义404403错误显示页面

在虚拟主机的配置处,增加如下配置,并将对应的错误页面拷贝到根目录下

     ErrorDocument 404 /404.html

  ErrorDocument 403 /403.html

 以覆盖默认的配置

3、 取消apache的版本返回显示签名

http.conf中搜索如下配置,将

ServerSignature On 改为 ServerSignature Off

 

目前版本apache均是将配置分散到多个conf文件中,可修改httpd-default.conf文件中的配置,注意在http.conf文件中将

#Include conf/extra/httpd-default.conf

修改为

Include conf/extra/httpd-default.conf,将#号取消

4、 取消目录内容列出配置

方法一,修改 httpd.conf配置文件,查找 Options Indexes FollowSymLinks,修改为 Options -Indexes

方法二,在www 目录下的修改.htaccess 配置文件,加入 Options -Indexes。 (推荐)

apache的配置是在虚拟主机的配置中如下配置

  <Directory "/xxx/www">

    Options –Indexes FollowSymLinks

    AllowOverride None

    Order allow,deny

    Allow from all

       </Directory>

  注意将FollowSymLinks清除掉,并将Indexs改为 -Indexs

5、 Apache的内容输出压缩配置

按如下配置进行页面压缩配置

LoadModule deflate_module modules/mod_deflate.so

<IfModule mod_deflate.c>

           SetOutputFilter DEFLATE

            SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png|bmp|swf|cab)$ no-gzip dont-vary

            SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary

            SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary

          # SetEnvIfNoCase Request_URI /.(gif|jpg|cab|jpe?g|exe|bmp|mp3|rar|zip|swf|png)$ no-gzip dont-vary

 

            AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript

            AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript

            SetEnvIf User-Agent ^Mozilla/4 gzip-only-text/html

            SetEnvIf User-Agent ^Mozilla/4/.0[678] no-gzip

            SetEnvIf User-Agent \bMSIE !no-gzip

            SetEnvIf User-Agent \bMSIE !gzip-only-text/html

          # SetEnvIfNoCase Request_URI /.(gif|jpg|cab|jpe?g|exe|bmp|mp3|rar|zip|swf|png)$ no-gzip dont-vary

     DeflateCompressionLevel 9

</IfModule>

6、 Apachestatus监控时默认地址的修改

Apache中的默认设置为

  <Location /server-status>

    SetHandler server-status

    Order deny,allow

#    Deny from all

    Allow from .localhost

</Location>

此种设置不安全,如果启用status监控需要修改默认地址,若启动虚拟主机,则在每个虚拟主机节点中进行配置,方有效,即在

<VirtualHost *:80>

  <Location /test-server-status>

    SetHandler server-status

    Order deny,allow

#    Deny from all

    Allow from .localhost

</Location>

</VirtualHost >

之间配置

若无虚拟主机则正常配置

<Location /test-server-status>

    SetHandler server-status

    Order deny,allow

#    Deny from all

    Allow from .localhost

</Location>

server-status的默认值需要修改一下,避免此处的安全漏洞

:若要启动扩展状态监控

即  配置

ExtendedStatus On  

注意: 

ExtendedStatus On不能配置在单独的虚拟主机节点内,需要在httpd.conf中配置

可参考: httpd-info.conf文件中的配置

 

7、 Apache的虚拟主机配置

NameVirtualHost *:80

 

<VirtualHost *:80>

        ServerName www.test.cn

        ServerAlias www.test.edu.cn

        DocumentRoot /test/www

        AddDefaultCharset Off

 

  <Directory "/test/www">

    Options -Indexes

    AllowOverride None

    Order allow,deny

    Allow from all

  </Directory>

  ErrorDocument 404 /404.html

  ErrorDocument 403 /403.html

</VirtualHost>

虚拟主机按以上进行配置,对于新版本的apache注意将

  # Virtual hosts

  #Include conf/extra/httpd-vhosts.conf

处进行修改

Include conf/extra/httpd-vhosts.conf

httpd-vhosts.conf文件中进行虚拟主机的配置

8、 Apache默认线程数调整

2.2版本的apache,在httpd.conf文件中将

  # Include conf/extra/ httpd-mpm.conf修改为

  Include conf/extra/ httpd-mpm.conf

 并在此文件中寻找到此处

# WinNT MPM

# ThreadsPerChild: constant number of worker threads in the server process

# MaxRequestsPerChild: maximum  number of requests a server process serves

<IfModule mpm_winnt_module>

    ThreadLimit          2000

    ThreadsPerChild      2000

    MaxRequestsPerChild    100

</IfModule>

  此处是将线程的限制修改到2000,注意window修改2000的限制在window下会报一些错误,因为window下默认达不到2000,一般只能到1912左右,要想突破2000的限制,需要使用ThreadLimit指令

    Linux下需要对以下模块设置,linuxApache默认工作模式是prefork

可通过 ./apachectl l来查看apache的工作模式

Window下通过 httpd.exe l来查看

:需要在apache的安装目录下的bin目录中

# prefork MPM

# StartServers: number of server processes to start

# MinSpareServers: minimum number of server processes which are kept spare

# MaxSpareServers: maximum number of server processes which are kept spare

# MaxClients: maximum number of server processes allowed to start

# MaxRequestsPerChild: maximum number of requests a server process serves

<IfModule mpm_prefork_module>

    StartServers          5

    MinSpareServers       5

    MaxSpareServers      10

    MaxClients          150

    MaxRequestsPerChild   0

</IfModule>

     Linux下若调整线程数则调整以上数字,重点调整MaxClients

   配置样例,需要根据机器的配置进行调整:

 <IfModule mpm_prefork_module>

    StartServers          10

    MinSpareServers      10

    MaxSpareServers      20

    MaxClients          1500

    MaxRequestsPerChild  10000

</IfModule>

 

9、 Apache循环日志配置

Linux下的配置样例:

/usr/local/apache 为apache的安装目录,根据实际情况修改

ErrorLog "| /usr/local/apache/bin/rotatelogs /usr/local/apache/logs/%Y_%m_%d_test-error.log 86400 480"

CustomLog "logs/test-access.log" common

 

Window下配置

ErrorLog "| bin/rotatelogs.exe logs/%Y_%m_%d_test-error.log 86400 480"

 

10、 LinuxApche日志定时清除

按以下配置即可

1root用户登录,检查crond服务的运行情况

 

[root@CentOS-APP2]# service crond status

crond (pid  3698) 正在运行...

 

若没运行,则

service crond start

 

2、在/usr/local/testweb下编写执行脚本

 

vi clean-log

 

拷贝如下脚本:

#! /bin/sh

#cd $(dirname $0) || exit 1

logdir=/usr/local/apache/logs/test-com/

cd ${logdir}

declare -i filesum=`ls test_access* |wc -l`

declare -i delnum=$filesum-30

#echo ${delnum}

if [ "${delnum}" -ge 1 ]; then

 rm -rf `ls -tr test_access* | head -${delnum}`

fi

declare -i filesumerr=`ls test_error* |wc -l`

declare -i delnumerr=$filesumerr-30

if [ "${delnumerr}" -ge 1 ]; then

 rm -rf `ls -tr test_error* | head -${delnumerr}`

fi

 

拷贝脚本时,请注意日志目录的实际位置和要清理的日志文件的命名格式,需要保持一致

 

这里的日志目录:

/usr/local/apache/logs/test-com/

 

要清理的日志格式:

test_access_20131223.log

test_error_20131223.log

 

设定要清理的日志数量,设定为30,超过30个日志文件则清理

3、设定运行权限

cd /usr/local/testweb

chmod 755 clean-log

 

4、设定定时运行

设定为每月30日晚130分定时执行

 

30 1 30 * * /usr/local/testweb/clean-log

 

/usr/local/testweb/clean-log  为编写好的日志清除脚本

设定方法:

root用户登录后执行:

crontab -e

 

打开一个文件,用vi的方式进行编辑

 

输入

30 1 30 * * /usr/local/testweb/clean-log

 

然后:wq退出保存

 

可在/var/spool/cron/目录下看到此文件

root

与所设定的用户名一致

5、执行

service crond reload  重新加载配置运行

6、测试

 

测试时可以执行

crontab -e 编辑设定的文件,增加如下配置,每分钟定时,可先修改脚本,将日志文件数减少,如将30变为3

 

*/1 * * * * /usr/local/testweb/clean-log

 

可以在/usr/local/apache/logs/test-com/目录下用vi命令按test_access_20131202.log的文件命名格式来建若干个空文件,以测试是否可定时删除文件

可以tail -n 100 /usr/spool/mail/root 查看错误

tail -f /var/log/cron  查看运行日志

11、 Apache默认参数修改

修改此文件

Include conf/extra/httpd-default.conf

作如下修改:

ServerTokens Full   修改为   ServerTokens Prod

Timeout 300  可修改为 Timeout 100

MaxKeepAliveRequests 100  可根据机器配置适当加大

 

12、 Apacheproxy功能启用

启用代理 需要在httpd.conf文件放开以下两个模块

 

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_http_module modules/mod_proxy_http.so

 

然后启用虚拟主机,在此句之后

NameVirtualHost *:80

 

增加如下:

<VirtualHost *:80>

        ProxyPreserveHost On

        ProxyPass /  http://172.16.0.2:9090/portal/

        ProxyPassReverse /  http://172.16.0.2:9090/portal/

        ServerName test.xxx.cn

        ServerAlias test.xxx.edu.cn

    </VirtualHost>

13、 Apache的缓存功能设置

Apache的缓存功能需要开启以下模块

#LoadModule cache_module modules/mod_cache.so

#LoadModule mem_cache_module modules/mod_mem_cache.so

缓存有两种:1、内存中缓存;2、磁盘缓存

此处讲解内存中缓存

配置样例:

 

<IfModule mod_cache.c>

    <IfModule mod_mem_cache.c>

        CacheEnable mem /image       #要缓存目录

        CacheEnable mem /images

        CacheEnable mem /js

        CacheEnable mem /style

     CacheEnable mem /css

        CacheEnable mem /script

        CacheEnable mem /swf

        CacheEnable mem /file

        MCacheMaxObjectCount 20000    #缓存对象数量

        MCacheMaxObjectSize 1048576   #缓存对象最大大小 字节

        MCacheMaxStreamingBuffer 65536 

        MCacheMinObjectSize 10         #缓存对象最小大小 字节

        MCacheRemovalAlgorithm LRU    #缓存的算法

        MCacheSize 2097152            #缓存的大小 kb

        CacheMaxExpire 14400          #缓存最大过期时间

        CacheDefaultExpire 14400

    </IfModule>

</IfModule>

 

配置说明:

1CacheEnable mem /images 缓存images下面的内容,这里的 mem只是一个缓存类型,指示mod_cache使用内存的存储管理器通过实施mod_mem_cache 。缓存类型disk指示mod_cache使用基于磁盘的存储管理的实施mod_disk_cache 。缓存类型,fd指示mod_cache使用文件描述符缓存实施mod_mem_cache

2MCacheSize最大内存使用量,插入在缓存和对象大小的对象是大于剩余内存,将被删除,直到新的对象可以被缓存。 被删除的对象选择使用指定的算法MCacheRemovalAlgorithm

 

3MCacheRemovalAlgorithm缓存算法:

LRU (最近最少使用)

LRU删除文件,没有时间最长的被访问的。

GDSFGreadyDual尺寸)

GDSF分配一个优先的文件缓存文件的费用的基础上,缓存大小。以最低的优先权文件被删除第一次。

4MCacheMaxObjectCount最大缓存对像个数

 

5MCacheMaxObjectCount最大缓存对像字节数

 

6MCacheMinObjectSize最小缓存对像字节数

 

7CacheMaxExpire 最大缓存结止时间

 

8CacheDefaultExpire  默认缓存结止时间

 

9CacheDisable /php       不缓存php下面的内容