第十三章httpd详解-创新互联

13.1 httpd简介

创新互联专注于网站设计制作、网站制作、网页设计、网站制作、网站开发。公司秉持“客户至上,用心服务”的宗旨,从客户的利益和观点出发,让客户在网络营销中找到自己的驻足之地。尊重和关怀每一位客户,用严谨的态度对待客户,用专业的服务创造价值,成为客户值得信赖的朋友,为客户解除后顾之忧。

 httpd是Apache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。

 通常,httpd不应该被直接调用,而应该在类Unix系统中由apachectl调用,在Windows中作为服务运行。

13.2 httpd版本

 本文主要介绍httpd的两大版本,httpd-2.2和httpd-2.4。

 CentOS6系列的版本默认提供的是httpd-2.2版本的rpm包,而CentOS7默认提供的是httpd-2.4版本的rpm包

13.2.1 httpd的特性

 httpd有很多特性,下面就分别来说说httpd-2.2版本和httpd-2.4版本各自的特性。

 httpd-2.2的特性:

 a) 事先创建进程

 b) 按需维持适当的进程

 c) 模块化设计,核心比较小,各种功能通过模块添加(包括PHP),支持运行时配置,支持单独编译模块

 d) 支持多种方式的虚拟主机配置,如基于ip的虚拟主机,基于端口的虚拟主机,基于域名的虚拟主机等

 e) 支持https协议(通过mod_ssl模块实现)

 f) 支持用户认证

 g) 支持基于IP或域名的ACL访问控制机制

 h) 支持每目录的访问控制(用户访问默认主页时不需要提供用户名和密码,但是用户访问某特定目录时需要提供用户名和密码)

 i) 支持URL重写

 j) 支持MPM(Multi Path Modules,多处理模块)。用于定义httpd的工作模型(单进程、单进程多线程、多进程、多进程单线程、多进程多线程)

  prefork:多进程模型,预先生成进程,一个请求用一个进程响应

   一个主进程负责生成n个子进程,子进程也称为工作进程;

   每个子进程处理一个用户请求,即使没有用户请求,也会预先生成多个空闲进程,随时等待请求到达,大不会超过1024个

   worker:基于线程工作,一个请求用一个线程响应(启动多个进程,每个进程生成多个线程)

   event:基于事件的驱动,一个进程处理多个请求

 httpd-2.4的新特性:

 a) MPM支持运行DSO机制(Dynamic Share Object,模块的动态装/卸载机制),以模块形式按需加载

 b) 支持event MPM,eventMPM模块生产环境可用

 c) 支持异步读写

 d) 支持每个模块及每个目录分别使用各自的日志级别

 e) 每个请求相关的专业配置,使用<If>来配置

 f) 增强版的表达式分析器

 g) 支持毫秒级的keepalive timeout

 h) 基于FQDN的虚拟主机不再需要NameVirtualHost指令

 i) 支持用户自定义变量

 j) 支持新的指令(AllowOverrideList)

 k) 降低对内存的消耗

13.2.2 httpd-2.4新增的模块

httpd-2.4在之前的版本基础上新增了几大模块,下面就几个常用的来介绍一下。

 mod_proxy_fcgi:反向代理时支持apache服务器后端协议的模块

 mod_ratelimit:提供速率限制功能的模块

 mod_remoteip:基于ip的访问控制机制被改变,不再支持使用Order,Deny,Allow来做基于IP的访问控制

13.3 httpd基础

13.3.1 httpd自带的工具程序

 htpasswd:basic认证基于文件实现时,用到的帐号密码生成工具

 apachectl:httpd自带的服务控制脚本,支持start,stop,restart

 apxs:由httpd-devel包提供的,扩展httpd使用第三方模块的工具

 rotatelogs:日志滚动工具

   access.log -->

   access.log,access.1.log

   access.log,access.1.log,access.2.log

 suexec:访问某些有特殊权限配置的资源时,临时切换至指定用户运行的工具

 ab:apache benchmark,httpd的压力测试工具

13.3.2 rpm包安装的httpd程序环境

 httpd-2.2版本程序环境:

   配置文件:

   /etc/httpd/conf/httpd.conf

   /etc/httpd/conf.d/*.conf

   配置文件的组成:grep "Section" /etc/httpd/conf/httpd.conf

### Section 1: Global Environment ### Section 2: 'Main' server configuration ### Section 3: Virtual Hosts

   配置格式:directive value

      directive:指令,不区分字符大小写

      value:为路径时,取决于文件系统

  服务脚本:

   /etc/rc.d/init.d/httpd

  服务脚本的配置文件:

   /etc/sysconfig/httpd

   主程序文件:

   /usr/sbin/httpd

   /usr/sbin/httpd.event

   /usr/sbin/httpd.worker

   日志文件目录:

   /var/log/httpd/

      access.log:访问日志

      error_log:错误日志

   站点文档目录:

   /var/www/html/

   模块文件路径:

   /usr/lib64/httpd/modules/

 httpd-2.4版本程序环境:

   主配置文件:/etc/httpd/conf/httpd.conf

   模块配置文件:/etc/httpd/conf.modules.d/*.conf

   辅助配置文件:/etc/httpd/conf.d/*.conf

   mpm:以DSO机制提供,配置文件为/etc/httpd/conf.modules.d/00-mpm.conf

13.3.3 web相关的命令

 curl命令:

   curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP,FTPS,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE及LDAP等协议。

   curl支持:

   https认证

    http的POST/PUT等方法

    ftp上传

    kerberos认证

    http上传

    代理服务器

    cookies

    用户名/密码认证

    下载文件断点续传

    socks5代理服务器

    通过http代理服务器上传文件到ftp服务器

  语法:curl [options] [URL ...]

  常用的options:

    -A/--user-agent <string>:设置用户代理发送给服务器

    -basic:使用Http基本认证

    --tcp-nodelay:使用TCP_NODELAY选项

    -e/--referer <URL>:来源网址

    --cacert <file>:CA证书(SSL)

    --compressed:要求返回时压缩的格式

    -H/--header <line>:自定义请求首部信息传递给服务器

    -I/--head:只显示响应报文首部信息

    --limit-rate <rate>:设置传输速度

    -u/--user <user[:password]>:设置服务器的用户和密码

    -0/--http1:使用http 1.0版本,默认使用1.1版本。这个选项是数字0而不是字母o

 elinks命令:

  语法:elinks [options] [URL ...]

  常用的options:

    -dump:不进入交互式模式,而直接将URL的内容输出至标准输出

 httpd命令:

  语法:httpd [options]

  常用的options:

    -l:查看静态编译的模块,列出核心中编译了哪些模块。它不会列出使用LoadModule指令动态加载的模块

    -M:输出一个已经启用的模块列表,包括静态编译在服务器中的模块和作为DSO动态加载的模块

    -v:显示httpd的版本,然后退出

    -V:显示httpd和apr/apr-util的版本和编译参数,然后退出

    -X:以调试模式运行httpd。仅启动一个工作进程,并且服务器不与控制台脱离

13.4 编译安装httpd-2.4

 httpd依赖于apr-1.4+,apr-util-1.4+,[apr-icon]

 apr:apache portable runtime

 CentOS6提供的apr是1.3.9版本,而apr-util也是1.3.9版本,所以想在CentOS6上安装httpd-2.4版本时需要先安装apr-1.4+和apr-util-1.4+,而在CentOS7中则不用另行安装

 httpd-2.4编译安装步骤:

 a) 安装开发环境(yum groupinstall)

 b) 下载并安装apr-1.4+和apr-util-1.4+。此步骤仅需在CentOS6系列上执行,CentOS7无需执行此步

cd /usr/src/ wget http://mirrors.hust.edu.cn/apache//apr/apr-1.5.2.tar.bz2 wget https://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.5.4.tar.bz2 tar xvf apr-1.5.2.tar.bz2 tar xvf apr-util-1.5.4.tar.bz2 cd apr-1.5.2 ./configure --prefix=/usr/local/apr make && make install cd ../apr-util-1.5.4 ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr make && make install

 c) 编译安装httpd

groupadd -r apache useradd -r -g apache apache yum -y install openssl-devel pcre-devel ./configure --prefix=/usr/local/apache --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=most --enable-mpms-shared=all --with-mpm=prefork make && make install

13.5 httpd常用配置

 httpd-2.2常用配置:

 修改监听的IP和端口:

Listen [IP:]PORT

  省略IP表示监听所有地址。Listen可重复出现多次

 持久连接:即长连接

Persistent Connection:连接建立,每个资源获取完成后不会立即断开连接,而是继续等待其它的请求完成

   如何断开?

    数量限制:默认获取100个资源后会自动断开连接

     时间限制:可配置,对于并发很大的服务器来说,此值不能设定太大

   副作用:对于并发访问量较大的服务器,持久连接功能会使有些请求得不到响应

   折衷:使用较短的持久连接时间。httpd-2.4支持毫秒级持久时间

KeepAlive {On | Off}:设定是否启用持久连接 MaxKeepAliveRequests 100:设定大允许获取的资源数,当达到些设定值时将自动断开连接 KeepAliveTimeout 15:设定时间限制,当达到些时间限制时将自动断开连接

  测试持久连接:

telnet HOST PORT                # telnet 192.168.1.1 80 GET /URL HTTP/1.1              # GET /index.html HTTP/1.1 Host: HOSTNAME or IP        # Host: 192.168.1.1

 MPM:Multi Path Modules,多处理模块。用于定义httpd的工作模型(单进程、单进程多线程、多进程、多进程单线程、多进程多线程)

  httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个

  rpm安装的包提供了三个二进制程序文件,分别用于实现对不同MPM机制的支持。确认方法:

ps aux |grep httpd

  默认为/usr/sbin/httpd,其使用prefork

   更换使用的httpd程序:编辑/etc/sysconfig/httpd文件,并重启服务使之生效

HTTPD={httpd | httpd.worker | httpd.event}

   配置MPM:编辑主配置文件/etc/httpd/conf/httpd.conf

   prefork的配置:

StartServers:服务启动时启动的服务器进程数(提供服务的子进程数,不包含主进程) MinSpareServers:最少空闲进程数 MaxSpareServers:大空闲进程数 ServerLimit:为MaxClients所准备的在其服务生命周期内所允许的进程数量大值 MaxClients:大并发请求数 MaxRequestsPerChild:一个服务器进程最多能够响应多少次的请求

   worker的配置:

StartServers:服务启动时启动的服务器进程数(提供服务的子进程数,不包含主进程) MaxClients:服务端最多启动的线程数量 MinSpareThreads:最少空闲线程数 MaxSpareThreads:最多空闲线程数 ThreadsPerChild:每个进程所能够启动的线程数 MaxRequestsPerChild:每个线程所能够响应的大请求数量,0表示无限制

 DSO:Dynamic Share Object,模块的动态装/卸载机制

   配置指令实现模块加载:

LoadModule <mod_name> <mod_path>

   模块路径(mod_path)可使用相对路径:

      相对于ServerRoot(/etc/httpd)指向的路径而言

      /etc/httpd/modules  -->  /usr/lib64/httpd/modules

 定义“Main”server的文档页面路径,DocumentRoot

   文档路径映射:

   DocumentRoot指向的路径为URL路径的起始位置

DocumentRoot "/var/www/html"

      test/index.html  -->  http://HOST:PORT/test/index.html

 站点访问控制:

   可基于两种类型的路径指明对哪些资源进行访问控制:

   针对文件系统路径:

<Directory ""> </Directory> <File ""> </File> <FileMatch ""> </FileMatch>

   针对URL路径:

<Location ""> </Location> <LocationMatch ""> </LocationMatch>

   访问控制机制:

   基于来源地址

   基于帐号

 Directory中“基于来源地址”实现访问控制:httpd-2.2版本

   a) Options

   所有可用特性:

Indexes  Includes  FollowSymLinks  SymLinksifOwnerMatch  ExecCGI  MultiViews

      Indexes:索引,当不指定要访问的页面具体路径而又没有默认主页(index.html)时,以链接形式列出根(默认为/var/www/html)下的所有内容

      FollowSymLinks:允许跟踪符号链接文件

   b) 基于来源地址的访问控制机制

Order:检查次序 Order allow,deny    先允许后拒绝。默认所有都拒绝,只有明确允许的才允许访问 Order deny,allow    先拒绝后允许。默认所有都允许,只有明确拒绝的才拒绝访问 Allow from 来源地址 Deny from 来源地址

   来源地址可以为:

      IP:如192.168.1.1

      NetAddr:

      172.16

      172.16.0.0

      172.16.0.0/16

      172.16.0.0/255.255.0.0

      FQDN:可以是完整的主机名,也可以是一个域名,如*.idfsoft.com

      All

 基于用户的访问控制:

  认证质询:此处是一个响应报文

   WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户提供帐号和密码

   认证:此处是一个请求报文

   Authorization:客户端用户填入帐号和密码后再次发送请求报文,认证通过,则服务器发送响应的资源

   认证类型:

      basic:明文

      digest:消息摘要,经过MD5加密

   安全域:需要用户认证后才能访问的路径称之为安全域

   应该通过名称对其进行标识,并用于告知用户认证的原因

   用户的帐号和密码存储于何处:

   虚拟帐号:仅用于访问某服务时用到的认证标识

   存储机制:

      文本文件

      SQL数据库

      ldap

      nis

   basic认证:基于文本文件的存储机制

   a) 定义安全域

<Directory "">   Options None   AllowOverride None   AuthType Basic   AuthName "String"   AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"   Require user username1 username2 ...     #只允许帐号文件中指定的用户登录访问 </Directory> 允许帐号文件中的所有用户登录访问:   在<Directory> </Directory>之间添加Require valid-user

   b) 提供帐号和密码存储(使用htpasswd命令)

htpasswd [options] passwordfile username

   常用的options:

    -c:自动创建passwordfile,因此,仅应该在添加第一个用户时使用

    -m /path/to/passwordfile:md5加密用户密码

    -s:sha1加密用户密码

    -D:删除指定用户

   c) 实现基于组进行认证

<Directory "">   Options None   AllowOverride None   AuthType Basic   AuthName "String"   AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"   AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE"   Require group GROUP1 GROUP2 ... </Directory>

   要提供用户帐号文件和组文件:

      组文件:只能手动定义,每一行定义一组。格式如下:

GROUP_NAME:user1 user2 user3 ...

 在组文件中的user必须在帐号文件中存在。

 定义默认主页面:

DirectoryIndex index.html index.html.var

 日志设定:

   定义日志格式:LogFormat

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent

   常用的日志格式定义宏:详情请看 官方文档

%h:客户端IP地址 %l:小写的L,远程登录的用户名,Remote logname (from identd,if supplied). -表示为空 %u:远程用户。Remote user, (from auth; may be bogus if return status (%s) is 401) %t:服务器收到请求的时间 %r:请求报文的首行信息(请求的方法,URL,协议版本) %>s:响应状态码 %b:响应报文的大小,不包含响应报文首部,单位是字节 %{Referer}i:请求报文当中"referer"首部的值。当前资源的访问入口,即从哪个页面中的超链接跳转而来 %{User-Agent}i:请求报文当中"User-Agent"首部的值。即发出请求用到的应用程序

                    

  错误日志:

Errorlog logs/error_log LogLevel <日志级别>    #默认是warn级别

   日志级别有以下这些:从低到高,日志级别越低,记录越详细

    debug

    info

    notice

    warn

    error

    crit

    alert

    emerg

  访问日志:

CustomLog logs/access_log combined

 路径别名:把一个URL映射至别的路径上

Alias /URL/ "/PATH/TO/SOMEDIR/" 如:Alias /bbs/ "/bbs/htdocs"

 设定默认字符集:

AddDefaultCharset UTF-8

 虚拟主机:

  有三种实现方案:

   基于ip:为每个虚拟主机准备至少一个ip地址

   基于port:为每个虚拟主机准备至少一个专用port,实践中很少使用

   基于域名:为每个虚拟主机准备至少一个专用域名

    需要将NameVirtualHost的注释去掉

   可混合使用上述三种方式中任意方式

  注意:一般虚拟主机莫与中心主机混用,所以,要使用虚拟主机,必须先禁用中心主机

   禁用中心主机:注释DocumentRoot

  每个虚拟主机都有专用配置:还可以在虚拟主机中通过Directory进行访问控制

<VirtualHost *:80>    #此处的*可以换成指定的IP地址   ServerAdmin webmaster@dummy-host.example.com   DocumentRoot /www/docs/dummy-host.example.com   ServerName dummy-host.example.com   ErrorLog logs/dummy-host.example.com-error_log   CustomLog logs/dummy-host.example.com-access_log common </VirtualHost>

 内置的status页面:可以查看服务器的状态

<Location /server-status>   SetHandler server-status   Order deny,allow   Deny from all   Allow from .example.com </Location>

 使用mod_deflate模块压缩页面优化传输速度:适用于httpd-2.2版本

  适用场景:

   a) 节约带宽,额外消耗CPU,同时,可能有些较老浏览器不支持

   b) 压缩适于压缩的资源,例如文本文件

  方法:

   a) 编辑主配置文件/etc/httpd/conf/httpd.conf,查找mod_deflate.so,将其前面的注释去掉,启用mod_deflate模块

   b) 将以下内容添加至主配置文件:

SetOutputFilter DEFLATE        #调用DEFLATE输出过滤器 # mod_deflate configuration # Restrict compression to these MIME types    对下面指定的类型进行压缩 AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/css # Level of compression (Highest 9 - Lowest 1)    设定压缩比率 DeflateCompressionLevel 9 # Netscape 4.x has some problems.    根据首部的User-Agent基于正则模式匹配浏览器类型和版本 BrowserMatch ^Mozilla/4 gzip-only-text/html        #浏览器是Mozilla/4时,用gzip压缩,但只压缩text/html格式的文档 # Netscape 4.06-4.08 have some more problems    根据首部的User-Agent基于正则模式匹配浏览器类型和版本 BrowserMatch ^Mozilla/4\.0[678] no-gzip                #浏览器是Mozilla的4.0、4.6、4.7或4.8版本时不压缩 # MSIE masquerades as Netscape, but it is fine    根据首部的User-Agent基于正则模式匹配浏览器类型和版本 BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html    #浏览器是IE6.0之前的版本时,不压缩,若要压缩则只用gzip压缩text/html格式的文档

 配置httpd支持https:

  a) 为服务器申请数字证书

   测试:通过私建CA发证书

    创建私有CA

    在服务器创建证书签署请求

    CA签证

  b) 配置httpd支持使用ssl,及使用的证书

yum -y install mod_ssl

   配置文件:/etc/httpd/conf.d/ssl.conf

DocumentRoot = ?? ServerName = ?? SSLCertificateFile = ?? SSLCertificateKeyFile = ??

  c) 测试基于https访问相应的主机

openssl s_client [-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename]

 httpd-2.4常用配置:

  切换使用MPM(编辑/etc/httpd/conf.modules.d/00-mpm.conf文件):

LoadModule mpm_NAME_module modules/mod_mpm_NAME.so #   NAME:有三种,分别为prefork,event,worker

  修改“Main" Server的DocumentRoot

  基于IP的访问控制法则:

   允许所有主机访问: Require all granted

   拒绝所有主机访问: Require all deny

   控制特定IP访问:

Require ip IPADDR:授权指定来源地址的主机访问 Require not ip IPADDR:拒绝指定来源地址的主机访问 IPADDR的类型:   IP:192.168.1.1   Network/mask:192.168.1.0/255.255.255.0   Network/Length:192.168.1.0/24   Net:192.168

   控制特定主机(HOSTNAME)访问:

Require host HOSTNAME Require not host HOSTNAME HOSTNAME的类型:   FQDN:特定主机的全名   DOMAIN:指定域内的所有主机

   注意:httpd-2.4版本默认是拒绝所有主机访问的,所以安装以后必须做显示授权访问

   示例:

<RequireAll>   Require not ip 192.168.1.20   Require all granted </RequireAll>

  虚拟主机:

   基于IP、PORT和域名都支持

   基于域名的不再需要NameVirtualHost指令

  ssl:

   启用模块:编辑/etc/httpd/conf.modules.d/00-base.conf文件,添加下面这行,如果已经有了但是注释了,则取消注释即可

LoadModule ssl_module modules/mod_ssl.so

  服务脚本:

   CentOS6编译安装的服务脚本:apachectl {start | stop | restart}

   CentOS7的服务脚本:httpd.service,使用systemctl控制

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

标题名称:第十三章httpd详解-创新互联
文章分享:https://www.cdcxhl.com/article18/ihegp.html

成都网站建设公司_创新互联,为您提供关键词优化响应式网站网站建设虚拟主机网站设计搜索引擎优化

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都seo排名网站优化