Centos 6.4 搭建lamp环境(系列2优化)
一、mysql的优化,前面博客里面已经有写了。
二、apache的优化
1. 屏蔽apache版本等敏感信息,我们在访问一些网站时,如果你用火狐浏览器的firebug功能或者curl它的url,响应信息里面有的时候会带着web服务器的版本号,暴漏了版本就意味着暴漏了版本漏洞。
[root@test7 conf]# vi /application/apache/conf/httpd.conf #解决方法
ServerRoot “/application/apache2.2.29″
ServerSignature Off #添加这一句
ServerTokens Prod #再添加这一句
[root@test7 conf]# /application/apache/bin/apachectl restart #重启apache
2. 系统内核参数优化,这个在系统初步优化中已经做了
3. 禁止目录index,这样是为了防止用户浏览你的站点目录,如果你是打算当ftp站点让大家下载用就不要禁止了,如果不是请禁止掉。
vi /application/apache/conf/httpd.conf
<Directory “/application/apache2.2.29/htdocs”> #这是你的站点所在的目录
Options FollowSymLinks #这里原先有个Indexes,要去掉
AllowOverride None
Order allow,deny
Allow from all
</Directory>
/application/apache/bin/apachectl restart #重启apache服务
4. 关闭CGI
vi /application/apache/conf/httpd.conf #删除下面的内容
<IfModule alias_module>
ScriptAlias /cgi-bin/ “/application/apache2.2.29/cgi-bin/”
</IfModule>
<IfModule cgid_module>
</IfModule>
<Directory “/application/apache2.2.29/cgi-bin”>
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
[root@test7 conf]# /application/apache/bin/apachectl restart
5. 禁用不必要的模块,这就需要我们在编译安装的时候选择大部分是模块动态安装
为了尽量减少网站遭受Web攻击的机会,管理员最好禁用目前不用的所有模块。你可以使用下面的命令,列示Web服务器所有的已编译模块。
# grep LoadModule /etc/httpd/conf/httpd.conf
# have to place corresponding `LoadModule’ lines at this location so the
# LoadModule foo_module modules/mod_foo.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
……
上述模块在默认情况下都是启用的,但往往并不需要,特别是mod_imap,mod_include, mod_info, mod_userdir, mod_autoindex。要禁用特定的模块,可以在该模块所在行的开头插入“#”注释,并重新启动服务。
6. 更改apache的默认用户
在默认的安装方式中,运行Apache进程时的用户是“nobody”或daemon。为安全起见,我们建议用非特权账户运行Apache。
[root@test7 conf]# useradd cspweb -s /sbin/nologin -M
[root@test7 conf]# vi /application/apache/conf/httpd.conf
User cspweb #用户和用户组改成我们新生成的用户
Group cspweb
7. 安全模块的安装(安装配置挺麻烦的还得开单张)
mod_security:它有请求过滤,日志审计等功能,可以防止SQL Injection,跨站脚本攻击。
mod_evasive:防DDOS
8. 禁止PHP解析指定站点的目录
不解析就不会执行,很多上传的目录php不去执行风险就降下来了
<Directory “/application/apache2.2.29/htdocs/upload”>
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
php_flag engine off #注意这里添加这里禁止php解析此目录下的文件
</Directory>
9. 尽可能减少HTTP请求数
http请求是要开销的,想办法减少请求数自然可以提高网页速度。减少css,js的调用,尽量写到页面中去,css和js尽量能合并就合并都可以减少HTTP请求数,这是开发的事情啦。
10. 错误页面优雅显示
可以将404,403等一些了错误信息页面定向到网站首页或者其他页面,提升用户体验
vi /application/apache/conf/httpd.conf
ErrorDocument 404 http://192.168.1.204/404.html
[root@test7 conf]# /application/apache/bin/apachectl restart
11. 配置cronolog 进行日志轮询
cronolog是一个简单的过滤程序,它从标准输入设备读入日志记录,并把这些记录写入到输出文件集,输出文件的名字由一个文件名模板和当前的日期时间组成。cronolog通常与web服务器一起使用,例如apache,用来安全地对日志文件按日期、月或其它特定的区间进行分割。
cd /tools
tar zxf cronolog-1.6.2.tar.gz
cd cronolog-1.6.2
./configure && make && make install
vi /application/apache/conf/httpd.conf
CustomLog “|/usr/local/sbin/cronolog /data1/logs/%Y%m%d_access_log” combined #指定我们命令的绝对路径,指定我们日志存放的位置以及日志生成的格式,这里是年月日生成,后面是日志格式,然后等到0点之后再有访问,就生成新的以日期命令的日志,access的信息就会写到当天以日志格式命令的日志文件里面。
/application/apache/bin/apachectl restart
12. 对worker或者prefork模式进行调节
这两种模式呢prefork稳定但耗资源,worker模式呢是多线程和多进程混合模式,资源开销小,处理请求多,但是相比于worker模式会稍微不稳定一点。
我们公司就用的worker模式所以prefork是禁用状态。
#<IfModule prefork.c>
#StartServers 5
#MinSpareServers 5
#MaxSpareServers 10
#ServerLimit 4000
MaxClients 2000
#MaxRequestsPerChild 0
#</IfModule>
对于上面的解释我就摘抄一下吧,意思差不多:
StartServers :Apache服务启动时进程个数
MinSpareServers:Apache服务在运行过程中存留最少的进程个数,如进程个数少于这个值,母进程会每秒创建一个httpd进程,直到等于该值。
MaxSpareServers:Apache服务在运行过程中空闲时存留的最多进程个数。如果进程个数多于这个值,母进程会每秒杀死一个httpd进程,直到等于该值。
ServerLimit、MaxClients:Apache服务能接受同时连接的 请求个数,如超过该值,则需排队等候。Apache服务进程数的最大值由MaxClients控制,在Apache1.3中最大只能设置为256,但在 Apache2.0中,可以通过在配置开头增加ServerLimit项目来突破256的限制,此时必须 MaxClients ≤ ServerLimit ≤ 20000。
MaxRequestsPerChild:每个httpd进程每接受该值数量的请求链接后就会杀死自己,如有需要,母进程会通过上边的规则重建子进程。
<IfModule mpm_worker_module>
StartServers 10 #服务器启动时,建立子进程的个数,默认是3
ServerLimit 500 #子进程总数,默认是16,最大是20000
MaxClients 2000 #最大的线程总数,任何超过MaxClients限制的请求都将进入等候队列。默认值是”400″,serverLimit乘以ThreadsPerChild的结果。因此要增加MaxClients的时候,你必须同时增加 ServerLimit的值。
MinSpareThreads 10 #最小空闲线程数
MaxSpareThreads 20 #最大空闲线程数
ThreadsPerChild 20 #每个子进程建立的常驻的执行线程数。默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了
MaxRequestsPerChild 10000 #设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为”0″,子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:
1.可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
</IfModule>
13. mod_deflate 文件压缩功能,mod_expires缓存功能
Gzip的思想就是把文件先在服务器端进行压缩,然后进行传输,传输完毕浏览器会对压缩的内容进行解压缩,一般我们会对文本内容进行压缩:html,js,css,xml,txt。
expires的意思就是,将图片等一些静态不会经常变化的资源在用户第一访问的时候就会加载到用户浏览器的缓存中,当然用户清理浏览器垃圾,就要重新缓存了,不管怎么说这也节省了带宽也提高了用户体验。这也是普遍采取的一种技术。
如果是静态加载就不用加载模块了,如果是动态加载就要:
vi /application/apache/conf/httpd.conf
LoadModule deflate_module modules/mod_deflate.so #前面的#去掉
LoadModule expires_module modules/mod_expires.so #前面的#去掉
#在结尾加上下面两段话
<IfModule mod_deflate.c>
DeflateCompressionLevel 9 #压缩等级1-9,9最高最费CPU,压缩比最高,我们生存环境用的是7
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php
AddOutputFilter DEFLATE css js
</ifmodule>
<IfModule mod_expires.c>
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 plus 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”
</IfModule>
#下面我们看下效果,看下一个html文件的压缩效果呢和一个图片的缓存效果
#一个30多M的文件传输至用了3.9M,缓存时间2016年也生效了,这样既节省了带宽也降低了服务器的压力。
至此,关于apache的优化就先介绍到这里吧。