Apache2.2学习笔记全集

一、基本介绍

  待补充...

二、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>

 

posted @ 2018-07-05 14:45  苏方木  阅读(401)  评论(0编辑  收藏  举报