zoukankan      html  css  js  c++  java
  • httpd安装.md

    httpd

    简介

    httpd是由apache软件基金会开发的一款著名的web服务器软件。由于其开放源代码,并且拥有跨平台、功能强大、安全稳定等特性,而被广泛使用。早期httpd是在修修补补的基础上成长起来的,所以早期也叫作a pachey server,由于开发httpd的组织叫作apache,因此httpd也被称作apache。httpd有三个长线维护版本,分别是httpd2.0、httpd2.2和httpd2.4。使用最为广泛的还是2.2和2.4的版本,虽然两个版本看起来数字相差不大,但是这两个版本改变还是挺大。
    httpd支持许多特性,大部分特性都是通过编译模块实现,因此httpd是以核心加模块组成的方式工作。httpd的模块分两种,一种叫作动态可装载模块(DSO),另一种叫作多道处理模块(MPM)。DSO动态可装模块每个模块对应httpd的某项功能,也就是我们广泛意义上理解的功能模块。但是,MPM多道处理模块和DSO不一样,它并不是指一种模块,它代表的是httpd的一种工作特性,常用的MPM有,prefork、worker、event。

    工作模式

    • prefork:多进程,每个请求用一个进程响应,这个过程会用到select机制来通知。

    • worker:多线程,一个进程可以生成多个线程,每个线程响应一个请求,但通知机制还是select不过可以接受更多的请求。

    • event:基于异步I/O模型,一个进程或线程,每个进程或线程响应多个用户请求,它是基于事件驱动(也就是epoll机制)实现的

    prefork的工作原理

    如果不用“--with-mpm”显式指定某种MPM,prefork就是Unix平台上缺省的MPM.它所采用的预派生子进程方式也是 Apache1.3中采用的模式。prefork本身并没有使用到线程,2.0版使用它是为了与1.3版保持兼容性;另一方面,prefork用单独的子进程来处理不同的请求,进程之间是彼此独立的,这也使其成为最稳定的MPM之一。

    worker的工作原理

    相对于prefork,worker是2.0版中全新的支持多线程和多进程混合模型的MPM。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是,worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性,这种MPM的工作方 式将是Apache2.0的发展趋势。

    event 基于事件机制的特性

    一个进程响应多个用户请求,利用callback机制,让套接字复用,请求过来后进程并不处理请求,而是直接交由其他机制来处理,通过epoll机制来通知请求是否完成;在这个过程中,进程本身一直处于空闲状态,可以一直接收用户请求。可以实现一个进程程响应多个用户请求。支持持海量并发连接数,消耗更少的资源。

    安装

    yum安装

    CentOS 6

    在通过yum安装httpd时在CentOS 6 中默认的是httpd-2.2版本。而CentOS 7中默认安装的是httpd-2.4。建议如果没有什么特殊的版本需求在安装中尽量使用yum安装这样很容易维护,同时也很方便。

    # yum install -y httpd httpd-devel
    
    • 配置文件

    /etc/httpd/conf/httpd.conf
    /etc/httpd/conf.d/*.conf
    
    • 服务脚本

    /etc/rc.d/init.d/httpd
    
    • 脚本配置文件

    /etc/sysconfig/httpd
    
    • 主程序文件

    /usr/sbin/httpd
    /usr/sbin/httpd.event
    /usr/sbin/httpd.worker
    
    • 日志文件

    /var/log/httpd/*.log
    
    • 站点文档

    /var/www/html
    
    • 模块文件路径

    /usr/lib64/httpd/modules
    
    • 服务控制和启动

    chkconfig  httpd  on|off
    service  httpd {start|stop|restart|status|configtest|reload}  
    

    CentOS 7

    • 配置文件

    /etc/httpd/conf/httpd.conf
    /etc/httpd/conf.d/*.conf
    
    • 模块相关的配置文件

    /etc/httpd/conf.modules.d/*.conf
    
    • systemd unit file

    /usr/lib/systemd/system/httpd.service
    
    • 主程序文件

    /usr/sbin/httpd
    
    • 日志文件

    /var/log/httpd/*.log
    
    • 站点文档

    /var/www/html
    
    • 模块文件路径

    /usr/lib64/httpd/modules
    
    • 服务控制

    systemctl  enable|disable  httpd.service
    systemctl  {start|stop|restart|status}  httpd.service
    

    编译安装

    Apache拥有4层结构,从核心到外层的module。而外层的module可以用通过静态和动态两种方式与Apache共同工作。这也就引入下文的“动态”和“静态”两种编译安装方式:

    • 静态编译: 编译的时候,所有的模块自己编译进 httpd 这个文件中 ,启动Apache的时候这些模块就已经加载进来了,可以直接来使用,而不用再 httpd.conf 中在 LoadModule 来加载,只要在 中来配置就可以了。

    • 动态编译: 编译的时候,使用enable-MODULE=shared 或者enable-mods-shared=MODULE来动态编译。 动态显然就不编译到httpd里面去了,启动的时候根本不会加载这个模块, 而是给你一个 module.so文件。如果使用,就在httpd.conf中使用 loadmodule 这个语法来加载,这个模块才有效。

    区别是:
    静态的模块通常在http.conf中用 来配置,动态的要先loadmoule来加载,然后再配置。

    编译安装httpd-2.4

    在安装httpd-2.4之前需要在系统中安装apr-1.4+和apr-util-1.4+,在CentOS7中的版本符合要求,但是在CentOS 6中并不符合要求需要专门源码安装apr和apr-util。

    • 安装apr

    # ./configure  --prefix=/usr/local/apr
    # make && make install
    
    • 安装apr-util

    # ./configure  --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr
    # make && make install
    
    • 安装httpd

    # yum install -y openssl-devel pcre-devel zlib-devel
    # ./configure --prefix=/usr/local/apache24 --sysconfdir=/etc/httpd24  --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=all
    # make && make install
    

    编译总结

    • 编译时默认是以动态编译的模式把模块加载进去,如果想要用静态编译则需要用--enable-mods-static=MODULE-LIST 来编译。

    • 编译最好使用动态编译也是默认的编译方式进行,这么使用可以灵活的添加使用的模块。

    • httpd-2.4中默认的mpm模式是event,如果想要使用prefork或者worker模式则需要在编译的时候指定编译所有的mpm模块并指定其中一个为默认的。

    • 自己测试使用动态编译和静态编译混合使用容易出现问题,所以还是不建议混合使用编译。

    • 自己编译测试中如果指定mpm模块是event则编译为静态模块,如果编译三个mpm模块并切默认的mpm模块不是event则这三个模块默认编译成动态的 .so 模块。

    httpd模块

    模块列表:
    基本(B)模块默认包含,必须明确禁用;扩展(E)/实验(X)模块默认不包含,必须明确启用

    模块名称 状态 简要描述
    mod_actions (B) 基于媒体类型或请求方法,为执行CGI脚本而提供
    mod_alias (B) 提供从文件系统的不同部分到文档树的映射和URL重定向
    mod_asis (B) 发送自己包含HTTP头内容的文件
    mod_auth_basic (B) 使用基本认证
    mod_authn_default (B) 在未正确配置认证模块的情况下简单拒绝一切认证信息
    mod_authn_file (B) 使用纯文本文件为认证提供支持
    mod_authz_default (B) 在未正确配置授权支持模块的情况下简单拒绝一切授权请求
    mod_authz_groupfile (B) 使用纯文本文件为组提供授权支持
    mod_authz_host (B) 供基于主机名、IP地址、请求特征的访问控制
    mod_authz_user (B) 基于每个用户提供授权支持
    mod_autoindex (B) 自动对目录中的内容生成列表,类似于"ls"或"dir"命令
    mod_cgi (B) 在非线程型MPM(prefork)上提供对CGI脚本执行的支持
    mod_cgid (B) 在线程型MPM(worker)上用一个外部CGI守护进程执行CGI脚本
    mod_dir (B) 指定目录索引文件以及为目录提供"尾斜杠"重定向
    mod_env (B) 允许Apache修改或清除传送到CGI脚本和SSI页面的环境变量
    mod_filter (B) 根据上下文实际情况对输出过滤器进行动态配置
    mod_imagemap (B) 处理服务器端图像映射
    mod_include (B) 实现服务端包含文档(SSI)处理
    mod_isapi (B) 仅限于在Windows平台上实现ISAPI扩展
    mod_log_config (B) 允许记录日志和定制日志文件格式
    mod_mime (B) 根据文件扩展名决定应答的行为(处理器/过滤器)和内容(MIME类型/语言/字符集/编码)
    mod_negotiation (B) 提供内容协商支持
    mod_nw_ssl (B) 仅限于在NetWare平台上实现SSL加密支持
    mod_setenvif (B) 根据客户端请求头字段设置环境变量
    mod_status (B) 生成描述服务器状态的Web页面
    mod_userdir (B) 允许用户从自己的主目录中提供页面(使用"/~username")
    mod_auth_digest (X) 使用MD5摘要认证(更安全,但是只有最新的浏览器才支持)
    mod_authn_alias (E) 基于实际认证支持者创建扩展的认证支持者,并为它起一个别名以便于引用
    mod_authn_anon (E) 提供匿名用户认证支持
    mod_authn_dbd (E) 使用SQL数据库为认证提供支持
    mod_authn_dbm (E) 使用DBM数据库为认证提供支持
    mod_authnz_ldap (E) 允许使用一个LDAP目录存储用户名和密码数据库来执行基本认证和授权
    mod_authz_dbm (E) 使用DBM数据库文件为组提供授权支持
    mod_authz_owner (E) 基于文件的所有者进行授权
    mod_cache (E) 基于URI键的内容动态缓冲(内存或磁盘)
    mod_cern_meta (E) 允许Apache使用CERN httpd元文件,从而可以在发送文件时对头进行修改
    mod_charset_lite (X) 允许对页面进行字符集转换
    mod_dav (E) 允许Apache提供DAV协议支持
    mod_dav_fs (E) 为mod_dav访问服务器上的文件系统提供支持
    mod_dav_lock (E) 为mod_dav锁定服务器上的文件提供支持
    mod_dbd (E) 管理SQL数据库连接,为需要数据库功能的模块提供支持
    mod_deflate (E) 压缩发送给客户端的内容
    mod_disk_cache (E) 基于磁盘的缓冲管理器
    mod_dumpio (E) 将所有I/O操作转储到错误日志中
    mod_echo (X) 一个很简单的协议演示模块
    mod_example (X) 一个很简单的Apache模块API演示模块
    mod_expires (E) 允许通过配置文件控制HTTP的"Expires:"和"Cache-Control:"头内容
    mod_ext_filter (E) 使用外部程序作为过滤器
    mod_file_cache (X) 提供文件描述符缓存支持,从而提高Apache性能
    mod_headers (E) 允许通过配置文件控制任意的HTTP请求和应答头信息
    mod_ident (E) 实现RFC1413规定的ident查找
    mod_info (E) 生成Apache配置情况的Web页面
    mod_ldap (E) 为其它LDAP模块提供LDAP连接池和结果缓冲服务
    mod_log_forensic (E) 实现"对比日志",即在请求被处理之前和处理完成之后进行两次记录
    mod_logio (E) 对每个请求的输入/输出字节数以及HTTP头进行日志记录
    mod_mem_cache (E) 基于内存的缓冲管理器
    mod_mime_magic (E) 通过读取部分文件内容自动猜测文件的MIME类型
    mod_proxy (E) 提供HTTP/1.1的代理/网关功能支持
    mod_proxy_ajp (E) mod_proxy的扩展,提供Apache JServ Protocol支持
    mod_proxy_balancer (E) mod_proxy的扩展,提供负载平衡支持
    mod_proxy_connect (E) mod_proxy的扩展,提供对处理HTTP CONNECT方法的支持
    mod_proxy_ftp (E) mod_proxy的FTP支持模块
    mod_proxy_http (E) mod_proxy的HTTP支持模块
    mod_rewrite (E) 一个基于一定规则的实时重写URL请求的引擎
    mod_so (E) 允许运行时加载DSO模块
    mod_speling (E) 自动纠正URL中的拼写错误
    mod_ssl (E) 使用安全套接字层(SSL)和传输层安全(TLS)协议实现高强度加密传输
    mod_suexec (E) 使用与调用web服务器的用户不同的用户身份来运行CGI和SSI程序
    mod_unique_id (E) 为每个请求生成唯一的标识以便跟踪
    mod_usertrack (E) 使用Session跟踪用户(会发送很多Cookie),以记录用户的点击流
    mod_version (E) 提供基于版本的配置段支持
    mod_vhost_alias (E) 提供大批量虚拟主机的动态配置支持

    说明:以上模块信息可能会不准所以请以官网为准。

  • 相关阅读:
    MySQL数据库学习【第三篇】增删改查操作
    MySQL数据库学习【第二篇】基本操作和存储引擎
    MySQL数据库学习【第一篇】数据库安装
    python全栈开发基础【第二十七篇】IO模型
    python全栈开发基础【第二十六篇】(concurrent.futures模块、协程、Greenlet、Gevent)
    python基础之带参数装饰器和迭代器
    python基础之闭包函数与装饰器
    逻辑回归
    朴素贝叶斯
    决策树
  • 原文地址:https://www.cnblogs.com/cuchadanfan/p/6075020.html
Copyright © 2011-2022 走看看