• 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>
  • 相关阅读:
    leetcode题库
    递归的存储以及执行顺序
    linux与开发板串口通信
    opencv基础到进阶(2)
    opencv基础到进阶(1)
    js的搜索遍历精讲
    js闭包深度讲解
    js使用for in遍历时的细节问题
    分分钟解决正则表达式
    css3中的新特性经典应用
  • 原文地址:https://www.cnblogs.com/gaoyuanzhi/p/9253792.html
Copyright © 2020-2023  润新知