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、 定義了404和403錯誤顯示頁面,代替了原來的默認頁面
3、 取消了apache的返回顯示簽名,取消錯誤頁面時的版本顯示。
4、 取消的目錄內容列出的配置。
5、 Apache的內容輸出壓縮配置。
6、 Apache的status監控時默認地址的修改。
7、 Apache虛擬主機配置
8、 Apache默認的線程數的調整 含window和linux下
9、 Apache循環日志的設置
10、 Linux下Apache日志定時清除設置
11、 Apache的默認參數修改
12、 Apache的proxy功能啟用
13、 Apache的緩存功能設置
在安裝apache后,需要對默認配置進行修改,以增強一下默認的安全性配置。
每個詳細的配置過程如下:
1、 針對Apache2.0.55以前的版本,需要進行如下修改
放開rewrite模塊
LoadModule rewrite_modulemodules/mod_rewrite.so
增加如下配置
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
若是Apache 2.0.55版本以上的apache,則需在http.conf中增加如下配置
TraceEnableOff
2、 定義404和403錯誤顯示頁面
在虛擬主機的配置處,增加如下配置,并將對應的錯誤頁面拷貝到根目錄下
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 –IndexesFollowSymLinks
AllowOverride None
Orderallow,deny
Allow fromall
</Directory>
注意將FollowSymLinks清除掉,并將Indexs改為 -Indexs
5、 Apache的內容輸出壓縮配置
按如下配置進行頁面壓縮配置
LoadModuledeflate_module modules/mod_deflate.so
<IfModulemod_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 DEFLATEtext/html text/plain text/xml text/css text/javascript
AddOutputFilterByType DEFLATEapplication/ms* application/vnd* application/postscript application/javascriptapplication/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、 Apache的status監控時默認地址的修改
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
Orderallow,deny
Allow fromall
</Directory>
ErrorDocument404 /404.html
ErrorDocument403 /403.html
</VirtualHost>
虛擬主機按以上進行配置,對于新版本的apache注意將
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf
處進行修改
Includeconf/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 ofrequests a server process serves
<IfModulempm_winnt_module>
ThreadLimit 2000
ThreadsPerChild 2000
MaxRequestsPerChild 100
</IfModule>
此處是將線程的限制修改到2000,注意window修改2000的限制在window下會報一些錯誤,因為window下默認達不到2000,一般只能到1912左右,要想突破2000的限制,需要使用ThreadLimit指令
Linux下需要對以下模塊設置,linux下Apache默認工作模式是prefork
可通過 ./apachectl –l來查看apache的工作模式
Window下通過 httpd.exe –l來查看
注:需要在apache的安裝目錄下的bin目錄中
# prefork MPM
# StartServers: number of server processesto start
# MinSpareServers: minimum number of serverprocesses which are kept spare
# MaxSpareServers: maximum number of serverprocesses which are kept spare
# MaxClients: maximum number of serverprocesses allowed to start
# MaxRequestsPerChild: maximum number ofrequests a server process serves
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
Linux下若調整線程數則調整以上數字,重點調整MaxClients
配置樣例,需要根據機器的配置進行調整:
<IfModulempm_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.log86400 480"
CustomLog "logs/test-access.log" common
Window下配置
ErrorLog "| bin/rotatelogs.exe logs/%Y_%m_%d_test-error.log 86400480"
10、 Linux下Apche日志定時清除
按以下配置即可
1、root用戶登錄,檢查crond服務的運行情況
[root@CentOS-APP2]#service crond status
crond (pid 3698) 正在運行...
若沒運行,則
service crondstart
2、在/usr/local/testweb下編寫執行腳本
vi clean-log
拷貝如下腳本:
#! /bin/sh
#cd $(dirname $0)|| exit 1
logdir=/usr/local/apache/logs/test-com/
cd ${logdir}
declare -ifilesum=`ls test_access* |wc -l`
declare -idelnum=$filesum-30
#echo ${delnum}
if [ "${delnum}"-ge 1 ]; then
rm -rf `ls -tr test_access* | head -${delnum}`
fi
declare -i filesumerr=`lstest_error* |wc -l`
declare -idelnumerr=$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 755clean-log
4、設定定時運行
設定為每月30日晚1點30分定時執行
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 crondreload 重新加載配置運行
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
作如下修改:
l ServerTokensFull 修改為 ServerTokens Prod
l Timeout300 可修改為 Timeout 100
l MaxKeepAliveRequests100 可根據機器配置適當加大
12、 Apache的proxy功能啟用
啟用代理需要在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、磁盤緩存
此處講解內存中緩存
配置樣例:
<IfModulemod_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>
配置說明:
1,CacheEnablemem /images 緩存images下面的內容,這里的 mem只是一個緩存類型,指示mod_cache使用內存的存儲管理器通過實施mod_mem_cache 。緩存類型disk指示mod_cache使用基于磁盤的存儲管理的實施mod_disk_cache 。緩存類型,fd指示mod_cache使用文件描述符緩存實施mod_mem_cache
2,MCacheSize最大內存使用量,插入在緩存和對象大小的對象是大于剩余內存,將被刪除,直到新的對象可以被緩存。 被刪除的對象選擇使用指定的算法MCacheRemovalAlgorithm
3,MCacheRemovalAlgorithm緩存算法:
LRU (最近最少使用)
LRU刪除文件,沒有時間最長的被訪問的。
GDSF(GreadyDual尺寸)
GDSF分配一個優先的文件緩存文件的費用的基礎上,緩存大小。以最低的優先權文件被刪除第一次。
4,MCacheMaxObjectCount最大緩存對像個數
5,MCacheMaxObjectCount最大緩存對像字節數
6,MCacheMinObjectSize最小緩存對像字節數
7,CacheMaxExpire最大緩存結止時間
8,CacheDefaultExpire 默認緩存結止時間
9,CacheDisable/php 不緩存php下面的內容