Linux网站架构系列之apache----调优篇
安装方法:在配置编译的工程中,加入参数--with-mpm=worker,如果不加的话系统会采用默认prefork模式。
优点:内存占用比prefork模式低,适合高并发高流量HTTP服务。
缺点:假如一个线程崩溃,整个进程就会连同其任何线程一起“死掉”。由于线程共享内存空间,所以一个程式在运行时必须被系统识别为“每个线程都是安全的”。服务稳定性不如prefork模式。
配置参数说明:
StartServers 2 #最初建立的子进程
MaxClients 150 #所有子进程中的线程总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。
MinSpareThreads 25 #最小空闲线程数,如果空闲的线程小于设定值,apache会自动建立线程,如果服务器负载大的话,可以考虑加大此参考值。
MaxSpareThreads 75 #最大空闲线程数,如果空闲的线程大于设定值,apache会自动kill掉多余的线程,如果服务器负载大的话,可以考虑加大此参考值。
ThreadsPerChild 25 #每个进程包含固定的线程数,此参数在worker模式中,是影响最大的参数,ThreadsPerChild的最大缺省值是64,如果负载较大,64是不够的。这时要显式使用threadlimit指令,它的最大缺省值是20000.
MaxRequestsPerChild 0 #功能同prefork模式
常用配置参考:
生产环境配置实例1:
StartServers 3
MaxClients 2000
ServerLimit 25
MinSpareThreads 50
MaxSpareThreads 200
ThreadLimit 200
ThreadsPerChild 100
MaxRequestsPerChild 0
生产环境配置实例2:
StartServers 5
MaxClients 9600
ServerLimit 64
MinSpareThreads 25
MaxSpareThreads 500
ThreadLimit 200
ThreadsPerChild 150
MaxRequestsPerChild 0
生产场景配置实例3:
StartServers 2
MaxClients 500
ServerLimit 25
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
生产场景配置实例4:
StartServers 3
MaxClients 1600
ServerLimit 25
MinSpareThreads 50
MaxSpareThreads 200
ThreadLimit 200
ThreadsPerChild 64
worker模式下所能同时处理的请求总数是由子进程总数乘以Threadsperchild值决定的,应该大于等于maxclients。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,如需加大时也需要显示声明serverlimit的值(最大值是20000)
特别说明:如果显示声明了ServerLimit,那么它乘以ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是ThreadsPerChild的整数倍,否则apache将会自动调节到一个相应值(可能是个非期望值)。
数学表达:
MaxClient=总的进程数(ServerLimit)x线程数(ThreadsPerChild)
MaxClient%ThreadsPerChild=0
生产环境中我们需要开启配置行,这样才能实现并发链接数的增加。
1、开启配置行
这里我们要apache的主配置文件,找到包含的行,并解开注释
[root@c64-web /]# grep ; /usr/local/apache/conf/
#Include conf/extra/
[root@c64-web /]# sed -i 's##Include conf/extra/; /usr/local/apache/conf/
注意:编译安装的,只有此行解开注释了,后面的修改才能生效。
2、修改配置
1)如果你的apache服务为worker模式,那么生产环境中可以选择上面worker模式的生产环境配置实例1的配置。
2)如果你的apache服务为prefork模式,那么生产环境中可以参考上面prefork模式的生产环境配置实例1的配置。
生产环境中,这里我建议大家选择worker模式。
十、开启防盗链
一些小网站为了盈利,通过盗链来实现对自己网站内容的丰富,这无疑加大了企业的空间和流量的成本,因此我们需要对apache进行防盗链的配置。
由于我们要用到mod_rewrite模块,因此我们需要先检测该模块是否安装,检测和安装方法与上面mod_deflate和mod_expires的一样,这里不多讲了。
防盗链配置:
一般我们都是将防盗链的配置,配置在虚拟主机里面,配置如下:
ServerAdmin
DocumentRoot /www/html
ServerName www.sunsky.pw
ServerAlias sunsky.pw
CustomLog |/usr/local/sbin/cronolog /app/logs/www_access_%Y%m%d.log combined
ErrorLog |/usr/local/sbin/cronolog /app/logs/www_error_%Y%m%d.log
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^*$ [NC]
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !^>
AllowOverride None
Options FollowSymLinks #不填写Indexes项,默认即为关闭。
Require all granted
第二种:
AllowOverride None
Options -Indexes #通过在Indexes前面加-来禁用此功能
Require all granted
第三种:
AllowOverride None
Options None #禁用所有选项
Require all granted
十二、禁用AllowOverride选项,关闭.htaccess文件使用
首先是性能考虑,如果AllowOverride启用了.htaccess文件,则apache需要在每个目录中查找.htaccess文件。因此,无论是否真正用到,启用.htaccess都会导致服务器性能的下降。另外,对于每一个请求,都需要读取一次.htaccess文件。
评论