Apache服务之httpd基础


纸上得来终觉浅,绝知此事要躬行。

Apache服务之httpd基础


1. Web服务器和应用服务器

1.1 Web服务器

Web服务器只负责处理HTTP协议,只是简单的通过响应HTML页面来处理HTTP请求。

(1) httpd(Apache)

  • 简述

    • Apache HTTP ServerApache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。
  • 特性

    • 支持通用网关接口
    • 集成代理服务器模块
    • 提供用户会话过程的跟踪
    • 支持安全Socket层(SSL)
    • 支持多种方式的HTTP认证
    • 支持最新的HTTP/1.1通信协议
    • 支持基于 IP 和基于域名的虚拟主机

(2) IIS

  • 简述
    • IISInternet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。
    • IIS是一种Web服务组件,其中包括Web服务器(网页浏览)、FTP服务器(文件传输)、NNTP服务器(新闻服务)和SMTP服务器(邮件发送)。
  • 缺点
    • IIS的安全脆弱性曾长时间被业内诟病,一旦IIS出现远程执行漏洞威胁将会非常严重。

(3) Lighttpd

  • 简述
    • Lighttpd是一个德国人领导的开源Web服务器软件,也是最流行的Apache服务器替代者。
  • 优点
    • Lighttpd是一个单线程的针对大量持续连接做出专门优化的Web服务器(这正是多数高流量网站需要的)。
    • Lighttpd支持FastCGIHTTP服务器端压缩、mod-rewrite和其他众多有用的功能。
    • 尽管Lighttpd拥有Apache的绝大多数功能,但它仍然保持轻量级(仅1MB)并且可以与Apache使用相同的配置。

(4) Nginx

  • 简述
    • Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强。Nginx对静态页面的支持相当出色,轻量且免费。Nginx不支持CGI,但是支持更灵活的FastCGI
  • 优点
    • Nginx可以在大多数Unix/Linux/MacOS上编译运行,并有Windows移植版
    • Nginx是一个很强大的高性能Web和反向代理服务器
    • 在连接高并发的情况下,NginxApache服务器不错的替代品

1.2 应用服务器

应用服务器一般是用来处理动态请求的服务器。应用服务器一般也支持HTTP协议,因此界限没这么清晰。但是应用服务器的HTTP协议部分仅仅是支持,一般不会做特别优化,所以很少有见Tomcat直接暴露给外面,而是和Nginxhttpd(Apache)等配合,只让Tomcat处理JSPServlet部分。

Java

  • GlassFish
  • JBoss
  • Apache Tomcat
  • WebLogic

.Net

  • IIS
  • Mono
  • Base4
  • TNAPS Application Server

PHP

  • Zend Server
  • HHVM

2. httpd服务的历史

httpd(Apache)的历史就是Web服务器的发展历史。

**Apache 1.x**(1995 年)

  • (1) 支持更多平台
  • (2) 支持动态共享对象
    • 能够在多种平台上支持以动态共享对象(DSO)的方式加载模块。
    • 这样是服务器更加灵活的工作,同时也使Apache的内容消耗量有所下降,从而响应更多请求连接。
    • 但是,因为频繁的加载模块会使服务器的效率变低。
  • (3) 增加APACIAPXS脚本
    • 通过APACI脚本用户可以在编译Apache的时候指定各种参数或安装布局,从而降低安装难度。
  • (4) 增加和增强了模块功能
    • 代理模块更容易使用
    • 支持以CONNECT方式连接
    • 别名和重定向开始支持正则表达式
    • 引入mod_negotiation模块以支持当时最新的HTTP/1.1协议

**Apache 2.0/2.2**(2002 年)

  • (1) 加强了Apache的跨平台移植能力
  • (2) 支持多路处理模块(MPM)
    • 提高了服务器的性能和稳定性,而且改善Apache可扩展性
    • 而在支持POSIX线程的UNIX/Linux系统上,可以使用混合的多进程、多线程模型运行
  • (3) 改变了原本的API接口
    • 增加了新的调用方式以提高模块性能
  • (4) 模块功能的增强
    • mod_ssl作为官方模块正式引入到Apache
    • 新增mod_auth_ldap可以使LDAP数据库进行认证
    • 代理模块重写,并且提供了过滤功能的结构优势
  • (5) 授权/认证模块的变动
    • mod_auth模块被分为mod_auth_basicmod_authn_file模块
    • mod_auth_dbm模块更名为mod_authn_dbm
    • mod_access模块更名为mod_authz_host
    • 新增mod_authn_alias模块用于简化身份认证配置
    • 新增htcacheclean工具来清除mod_disk_cache模块使用的缓冲存储区
    • 新增mod_proxy_balancer模块来为mod_proxy提供负载均衡服务
    • 更新了正则表达式库的支持
    • 通过mod_dbdapr_dbd框架支持SQL数据库使用

**Apache 2.3/2.4**(2008 年)

  • 增强多路处理模块(MPM)
    • mpm模块将不再是只能选择一种mpm编译进内核,而是全部编译并根据配置文件进行配置
  • KeepAliveTimeout支持毫秒为单位
    • 减轻服务器负担
  • 内存使用量减少
    • 使得Apache能在有限的内存中处理更多请求连接
  • 新增表达式解析器
  • 新增大量模块
    • mod_luaLUA语言的支持
    • mod_ratelimit提供客户端限速功能
    • mod_proxy_fcgi提供了FastCGI的支持
    • mod_proxy_scgi提供了SCGI网关的支持
    • mod_allowmethods更深入的限制HTTP连接方式
    • event模块不再是测试模块,以及可以运行在生产平台了
  • FastkCGI加入到守护进程中

3. httpd服务的特性

服务特性DSO

  • 简述
    • DSO是动态共享模块(Dynamic Shared Object)的缩写
    • httpd具有高度模块化:core + modules
    • 我们可以更加灵活的对httpd服务进行自己的个人定制和特性化
  • 优点
    • httpd.conf配置文件中使用LoadModule来完成模块的加载,使用更加灵活
    • 使用DSOapxs(Apache扩展)可以将新模块快速加入服务器,无须重新编译
    • 通过DSO模块的扩展和不同配置,可以在一个服务器运行多个副本提供不同的功能
  • 缺点
    • DSO受操作系统的限制,加载时需要进行符号解析,因此启动时间需要加载
    • 更换平台后,所以模块都必须在此平台上重新编译,否则无法使用

服务特性MPM

  • 简述
    • MPM是混合多进程模型(Multipath Processing Modules)的缩写
  • prefork
    • 多进程模型:每个进程响应一个请求
    • 一个主进程负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求。即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不会超过1024个(这个数据可以设置)。
    • c10k问题
  • worker
    • 多线程模型:每个线程响应一个请求
    • 一个主进程生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求
    • m进程和n线程:m*n
  • event
    • 事件驱动模型:基于事件回调(异步)完成,每个线程响应 n 个请求
    • 一个主进程生成m个子进程,每个进程处理n个请求
    • m*n

功能特性

  • 虚拟主机
  • 日志控制
  • 身份认证
  • 性能调整
  • 别名和重命名
  • 数据库连接管理
  • 服务器安全设置
  • 代理服务器和缓存
  • 元信息和内容协商
  • SSL安全套接字
  • CGI/FastCGI接口

4. httpd安装

4.1 二进制程序安装

# 查询RPM包信息
$ rpm -qi httpd-2.4.6-67.el7.centos.6.x86_64.rpm

# 安装RPM包
$ rpm -ivh httpd-2.4.6-67.el7.centos.6.x86_64.rpm

# 卸载RPM包
$ rpm -e httpd-2.4.6-67.el7.centos.6.x86_64.rpm

# 推荐使用yum安装
$ yum install -y httpd
# 如果使用的LFS可以使用已经编译好的包安装
$ wget http://archive.apache.org/dist/httpd/binaries/linux/httpd-2.0.50-i686-pc-linux-gnu.tar.gz
$ tar -zxvf httpd-2.0.50-i686-pc-linux-gnu.tar.gz
$ cd httpd-2.0.50

# 安装到指定目录并启动
$ ./install-bindist.sh /usr/local/apache2.0.50
$ ./httpd start

4.2 源代码编译安装

为了方便源代码安装,可以使用Apache Toolbox工具图形化安装httpd服务。

  • (1) 下载
# 下载安装包并进行校验
$ wget http://archive.apache.org/dist/httpd/httpd-2.4.29.tar.bz2
$ wget http://archive.apache.org/dist/httpd/httpd-2.4.29.tar.bz2.md5
$ md5sum -c httpd-2.4.29.tar.bz2.md5
httpd-2.4.29.tar.bz2: 确定

# 解压
$ tar -xjvpf httpd-2.4.29.tar.bz2 -C /usr/src
$ cd /usr/src/httpd-2.4.29
  • (2) 编译需求
# 编译要求
# 1. 空间需求(存放源码目录至少70MB,安装目录至少20MB)
# 2. 编译器需求(GCC编译器)
# 3. 时间需求(ntp服务同步)
# 4. 工具包需求(apr/apr-util)
# 5. APACI
$ ntpdate stdtime.gor.hk
$ hwclock -w
  • (3) configure 脚本
# 常用配置
# ./configure -h  可以查看更多参数选项信息
--prefix=/apache_patch: 指定Apache安装位置
--enable-module=so: 启用so模块,让Apache可以通过DSO方式加载模块
--enable-mods-shared=all: 以共享方式编译全部的模块,不包括核心模块
--enable-modules=all/most: 以静态方式编码全部的模块
--with-mpm=worker: 让Apache以worker方式运行
# 手动编译事例
$ CC="gcc" \
> ./configure --enable-modules="mod_proxy mod_so mod_authn_dbd"
  • (4) 编译安装
# 加速安装,一个CPU可以使用-j3,之后每增加一个+2
$ make -j9
$ make install
  • (5) 清除调试符号
$ strip /usr/local/apache2/bin/httpd

文章作者: Escape
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Escape !
  目录