一、基本介绍
待补充...
二、Apache默认配置文件解释
# 定义apache运行的目录,即程序所在的位置 ServerRoot "/usr/local/apache2" # 定义Apache服务监听的端口 Listen 80 # 启动Apache时加载的模块 LoadModule php5_module modules/libphp5.so <IfModule !mpm_netware_module> <IfModule !mpm_winnt_module> User daemon Group daemon </IfModule> </IfModule> # 管理员邮箱的地址 ServerAdmin you@example.com # Apache监督的ip/域名:端口号 ServerName 127.0.0.1:80 # html文件(即项目文件)存放的路径 DocumentRoot "/usr/local/apache2/htdocs" # 对根目录的限制 <Directory /> # 禁止显示Apache目录列表 Options FollowSymLinks # 禁止用户对目录配置文件(.htaccess)重载 AllowOverride None # 配置allow和deny的顺序,默认只有最后一个关键字起作用 Order deny,allow # 拒绝所有访问 Deny from all </Directory> <Directory "/usr/local/apache2/htdocs"> # 禁止显示htdoc下的文件列表,如果htdoc下面没有可以发达的文件,会显示静止访问根 Options FollowSymLinks # 跟下没有index.html等页面,会显示跟下的文件名 #Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> <IfModule dir_module> # 首页文件 可以写多个 DirectoryIndex index.html index.php </IfModule> #阻止.htaccess 和 .htpasswd等重要文件被web用户查看 <FilesMatch "^\.ht"> Order allow,deny Deny from all Satisfy All </FilesMatch> # 错误日志的路径 ErrorLog "logs/error_log" # 错误日志的级别 LogLevel warn <IfModule log_config_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule> # 访问日志存放路径 CustomLog "logs/access_log" common </IfModule> # cgi的配置 #<IfModule alias_module> # ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/" #</IfModule> #<IfModule cgid_module> #</IfModule> #<Directory "/usr/local/apache2/cgi-bin"> # AllowOverride None # Options None # Order allow,deny # Allow from all #</Directory> DefaultType text/plain # 允许传送时使用以下几种压缩方式 <IfModule mime_module> TypesConfig conf/mime.types AddType application/x-compress .Z AddType application/x-gzip .gz .tgz </IfModule> <IfModule ssl_module> SSLRandomSeed startup builtin SSLRandomSeed connect builtin </IfModule>
三、Apache三种工作模式
关键词:MPM (Multi-Processing Module)多进程处理模块
Linux下,使用/usr/local/apache2/bin/httpd -V查看当前Apache的工作模式,默认的工作模式是prefork
1.Prefork MPM 多进程
从字面意思看(pre),这是一种预派生的工作模式,在Apache启动的时候就生成几个进程然后等待连接,这样就可以减少频繁创建和销毁进程的开销,每一个进程下只有一个线程。
优点:适合于没有线程安全库,需要避免线程兼容性问题的系统
缺点:每一个进程相都会消耗大量资源,不擅长处理高并发的场景。
启动apache后,查看Apache进程,一个主进程派生了5个子进程。
init(1)─┬─auditd(1126)───{auditd}(1127)
├─crond(1383)
├─httpd(1439)─┬─httpd(1784)
│ ├─httpd(1785)
│ ├─httpd(1786)
│ ├─httpd(1787)
│ └─httpd(1788)
......
2.Worker MPM 多进程+多线程
进程与线程混合,Apache通过线程俩处理请求,每个子进程拥有固定数量的线程。服务器根据请求的数量调整进程的数量。
3.Event MPM 多进程+多线程+epoll(异步非阻塞)
Apache的keep-alive可以保持服务端与客户端的连接,如果客户端没有请求,线程就是挂在哪里等待,这就导致了线程的资源浪费。
在Event模式下,有一个专门的线程来管理keep-alive类型的线程。将请求传递给服务线程,执行完毕后,又允许它释放。这样,一个线程就能处理几个请求了,实现了异步非阻塞。
Event MPM在遇到某些不兼容的模块时,会失效,将会回退到worker模式,一个工作线程处理一个请求。
mpm配置文件解释
文件路径:/usr/local/apache2/conf/extra/httpd-mpm.conf
<IfModule !mpm_netware_module> PidFile "logs/httpd.pid" </IfModule> <IfModule !mpm_winnt_module> <IfModule !mpm_netware_module> LockFile "logs/accept.lock" </IfModule> </IfModule> <IfModule mpm_prefork_module> StartServers 5 # 服务器启动时建立的子进程的数量,默认是5 MinSpareServers 5 # 空闲子进程的最小数量,默认5;如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程 MaxSpareServers 10 空闲子进程的最大数量,默认10;如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程会杀死多余的子进程。 MaxClients 150 #同时处理客户端请求的数量 MaxRequestsPerChild 0 #每个子进程在其生命周期内允许最大的请求数量,如果请求总数已经达到这个数值,子进程将会结束,如果设置为0,子进程将永远不会结束。 </IfModule> <IfModule mpm_worker_module> StartServers 2 # 服务器启动时建立的子进程数量,在workers模式下默认是2. MaxClients 150 # 限定服务器同一时间内客户端最大接入的请求数量. MinSpareThreads 25 # 空闲子进程的最小数量,默认25 MaxSpareThreads 75 # 空闲子进程的最大数量,默认75 ThreadsPerChild 25 # 每个子进程产生的线程数量,默认是25 MaxRequestsPerChild 0 # 每个子进程在其生命周期内允许最大的请求数量,如果请求总数已经达到这个数值,子进程将会结束,如果设置为0,子进程将永远不会结束,建议值:建议值:1分钟pv(访问量)/MaxClients。设置为非0的好处:1.可以防止程序中可能存在的内存泄漏无限进行下去,从而耗尽内存。2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
</IfModule> # BeOS 多媒体操作系统使用的模块 <IfModule mpm_beos_module> StartThreads 10 MaxClients 50 MaxRequestsPerThread 10000 </IfModule> # Netware网络操作系统使用的模块 <IfModule mpm_netware_module> ThreadStackSize 65536 StartThreads 250 MinSpareThreads 25 MaxSpareThreads 250 MaxThreads 1000 MaxRequestsPerChild 0 MaxMemFree 100 </IfModule> # OS/2操作系统使用的模块 <IfModule mpm_mpmt_os2_module> StartServers 2 MinSpareThreads 5 MaxSpareThreads 10 MaxRequestsPerChild 0 </IfModule> # Windows操作系统使用的模块 <IfModule mpm_winnt_module> ThreadsPerChild 150 MaxRequestsPerChild 0 </IfModule>
关于MPM配置的建议值(来自百度)
#mpm_perfork模块 <IfModule mpm_prefork_module> StartServers 5 #推荐设置:小=默认 中=20~50 大=50~100 MinSpareServers 5 #推荐设置:与StartServers保持一致 MaxSpareServers 10 #推荐设置:小=20 中=30~80 大=80~120 MaxClients 150 #推荐设置:小=500 中=500~1500 大型=1500~3000 MaxRequestsPerChild 0 #推荐设置:小=10000 中或大=10000~500000 (此外,还需额外设置ServerLimit参数,该参数最好与MaxClients的值保持一致。) </IfModule> #mpm_worker模块 <IfModule mpm_worker_module> StartServers 2 #推荐设置:小=默认 中=3~5 大=5~10 MaxClients 150 #推荐设置:小=500 中=500~1500 大型=1500~3000 MinSpareThreads 25 #推荐设置:小=默认 中=50~100 大=100~200 MaxSpareThreads 75 #推荐设置:小=默认 中=80~160 大=200~400 ThreadsPerChild 25 #推荐设置:小=默认 中=50~100 大型=100~200 MaxRequestsPerChild 0 #推荐设置:小=10000 中或大=10000~50000( 此外,如果MaxClients/ThreadsPerChild大于16,还需额外设置ServerLimit参数,ServerLimit必须大于等于 MaxClients/ThreadsPerChild 的值。) </IfModule>
四、编译新的模块
apachepath/bin/apxs -c -i -a apache_source_path/modules/mappers/mod_name.c
选项说明:
-c 执行编译操作
-i 安装操作,安装一个或多个动态共享对象到服务器的modules目录
-a 自动增加一个LoadModule行到httpd.conf文件,以激活此模块,若此行存在则启用之
五、基于不同FQDN的虚拟主机的配置
[root@localhost apache2]# tail -3 conf/httpd.conf Include conf/extra/httpd-default.conf Include conf/extra/bbs.conf Include conf/extra/wordpress.conf [root@localhost apache2]# cat conf/extra/bbs.conf <VirtualHost *:80> ServerAdmin root@localhost DocumentRoot "/usr/local/apache2/htdocs/bbs" ServerName www.gaopengbbs.com ServerAlias www.gaopengbbs.com ErrorLog "logs/www.bbs.com-error_log" CustomLog "logs/www.bbs.com-access_log" common <Directory "/"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> </VirtualHost> [root@localhost apache2]# cat conf/extra/wordpress.conf <VirtualHost *:80> ServerAdmin root@localhost DocumentRoot "/usr/local/apache2/htdocs/wordpress" ServerName www.gaopengwordpress.com ServerAlias www.gaopengwordpress.com ErrorLog "logs/www.wordpress.com-error_log" CustomLog "logs/www.wordpress.com-access_log" common <Directory "/"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> </VirtualHost>