一、RPM包安装配置程序环境

   1.CentOS6系列(默认httpd2.2)

httpd(2.2&2.4)RPM搭建配置定义详解_httpd(2.2&2.4)RPM搭建配

         (1)配置文件:/etc/httpd/conf/httpd.conf  /etc/httpd/conf.d/*.conf()

         (2)服务脚本:/etc/rc.d/init.d/httpd

   配置文件:/etc/sysconfig/httpd

         (3)主程序文件:/usr/sbin/httpd  /usr/sbin/httpd.event  /usr/sbin/httpd.worker

         (4)日志文件目录:/var/log/httpd  access_log: 访问日志error_log:错误日志

         (5)站点文档目录:/var/www/html

         (6)模块文件路径:/usr/lib64/httpd/modules

         (7)配置文件的组成:~]# grep "Section" /etc/httpd/conf/httpd.conf

###Section 1: Global Environment

###Section 2: 'Main' server configuration

###Section 3: Virtual Hosts

         (8)配置格式:directivevalue

       directive: 不区分字符大小写;value: 为路径时,取决于文件系统;

 

   2.CentOS6系列(默认httpd2.4)

        (1)配置文件:/etc/httpd/conf/httpd.conf  /etc/httpd/conf.d/*.conf

        (2)模块相关的配置文件:/etc/httpd/conf.modules.d/*.conf

                        systemd unit file:/usr/lib/systemd/system/httpd.service

        (3)主程序文件:/usr/sbin/httpd(httpd-2.4支持MPM的动态切换)

        (4)日志文件目录:/var/log/httpd  access_log: 访问日志error_log:错误日志

        (5)站点文档:/var/www/html

        (6)模块文件路径:/usr/lib64/httpd/modules        

        (7)服务控制:

systemctl  enable|disable  httpd.service

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

 

 

 

 

二、httpd2.2主配置文件概述

    主配置文件(三段)/etc/httpd/conf/httpd.conf

# The configurationdirectives are grouped into three basic sections:

#1)  Directives thatcontrol the operation of the Apache server process as a whole (the 'globalenvironment').

#2)  Directives thatdefine the parameters of the 'main' or 'default' server,which responds torequests that aren'thandled by a   virtual host. Thesedirectives also provide default values for the settingsof all virtual hosts.

#3) Settings for virtual hosts, which allow Web requests to be sent todifferent IP addresses or hostnames andhave them handled by the same Apache server proces

     配置格式:directive   value

directive:不区分字符大小写;

value:为路径时,是否区分字符大小写,取决于文件系统;

httpd(2.2&2.4)RPM搭建配置定义详解_httpd(2.2&2.4)RPM搭建配_02

[root@localhost  ~]#  grep   "Section"     /etc/httpd/conf/httpd.conf


### Section 1:  Global Environment

全局配置段

### Section 2:  'Main' server configuration

中心主机配置段

### Section 3:  Virtual Hosts

虚拟主机配置段

全局配置:其中的指令用于在全局层面配置一个Apache服务器相关属性

中心主机配置:其中的指令用于定义"主要"或者"默认"的服务,改段参数也能够够提供虚拟主机端配置的相关指令

虚拟主机段:允许Web请求从不同的IPFQDN或者同一台Apache服务器的不同进程端口被发送

注意:中心主机段和虚拟主机段不能同时被发送,虚拟主机段可以在/etc/httpd/conf.d/*.conf被定义

 

 

 

 

三、"main" "default"段相关配置文件解析

    1.修改监听的IP和PortListen   [IP:]PORT         

          1) Listen指令可重复出现多次;

          2) PORT不能省略,但ip可以省略;省略ip表示监听0.0.0.0.,即本机所有IP;

          3) 修改监听socker,不能重新加载服务配置,必须重启服务才能生效

 

    2.持久[]连接功能

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

                                        通过连接请求数量限制或者时间长短限制来实现TCP连接的断开

           弊端:对并发访问量较大的服务器,长连接机制会使得后续某些请求无法得到正常 响应;

          解决方法:使用较短的持久连接时长,以及较少的请求数量;httpd-2.4 支持毫秒级持久时间;

配置文件


KeepAlive On|Off

关闭|开启持久连接,默认关闭

MaxKeepAliveRequests   100

最大持久连接请求数量:100

KeepAliveTimeout  15

持久连接超时时长:15

         

    3.MPMMultipath ProcessModule,多道处理模块

         httpd-2.2不支持同时编译多个MPM模块,所以只能编译选定要使用的那个;

         CentOS 6的rpm包为此专门提供了应用程序文件httpd(prefork), httpd.worker, httpd.event用于实现对不同的MPM机制的支持;

       (1)查看所使用的MPM模块

                [root@localhost /]# ps  aux  |grep httpd显示主控进程(root)和服务启动进程(apache)

默认使用的为/usr/sbin/httpd,其为prefork的MPM模块;

httpd(2.2&2.4)RPM搭建配置定义详解_httpd(2.2&2.4)RPM搭建配_03

       (2)查看httpd程序的模块列表:

      查看静态编译的模块:  #httpd  -l

      查看静态编译及动态编译的模块:#httpd  -M

httpd(2.2&2.4)RPM搭建配置定义详解_httpd(2.2&2.4)RPM搭建配_04

       (3)更换使用httpd程序,以支持其它MPM机制;

      编辑/etc/sysconfig/httpd文件中"HTTPD=/usr/sbin/httpd.{worker,event}",取消注释#

      注意:重启服务进程方可生效

httpd(2.2&2.4)RPM搭建配置定义详解_httpd(2.2&2.4)RPM搭建配_05

       (4)MPM配置文件

  对于CentOS 6httpd2.2event机制依然是测试使用,不建议在生产环境中使用

  对于Linux而言进程和线程的效率类似,所以在httpd2.2上用线程模型取代进程模型,用worker取代prefork性能上的差别可忽略

PV: Page View

页面访问,一个页面年会于多个资源

UV: User View

用户访问量,站在独立IP量角度



prefork的配置:


<IfModule  prefork.c>

条件式参数配置模式:prefork

StartServers       8

服务器刚启动时的进程数量

MinSpareServers    5

最少空闲进程数,当小于此数时候主控进程会自动启动增加

MaxSpareServers   20

最大空闲进程数

ServerLimit      256

服务器生命周期最大在线进程数量,应该不能小于MaxClients

MaxClients       256

最大并发响应数量,最大允许启动杜少进程去响应用户请求

MaxRequestsPerChild  4000

每个进程最多可以处理多少个请求,到4000销毁

</IfModule>        




worker的配置:


<IfModule  worker.c>

条件式参数配置模式:prefork

StartServers         4

服务器刚启动时的进程数量

MaxClients         300

最大并发响应数量,最大允许启动杜少进程去响应用户请求

MinSpareThreads     25

最少空闲线程数

MaxSpareThreads     75

最大空闲线程数

ThreadsPerChild     25

每个进程可以生成的线程数量

MaxRequestsPerChild  0

每个进程最多可以处理多少个请求,0表示无限制

</IfModule>


 

   4.DSO:动态共享模块机制,配置指令实现模块加载

通过配置指令动态加卸载模块:LoadModule  <mod_name> <mod_path>

模块路径可使用相对地址[ServerRoot指令(/etc/httpd)]指向的路径而言/etc/httpd/modules/

若不需要启用该模块,仅需用#将其注释即可

httpd(2.2&2.4)RPM搭建配置定义详解_httpd(2.2&2.4)RPM搭建配_06

 

   5.定义'Main'server(中心主机)的文档页面路径

           中心主机:整个Web服务器仅提供一个Web站点

DocumentRoot    "… ..."文档路径映射(网站根目录)定义,DocumentRoot指向的路径为URL路径的起始位置;

          文档路径映射:DoucmentRoot指向的路径为URL路径的起始位置,其相当于站点URL的根路径;

                  (FileSystem) /web/host1/index.html -->  (URL)  /index.html

 

   6.站点访问控制

       (1)访问控制机制:基于来源地址基于账号;

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

                  1)文件系统路径:

对目录:<Directory "">  … ... </Direcotry>

对单个文件:<File "">  … ...  </File>

对匹配到的模式:<FileMatch "PATTERN">   … ...  </FileMatch>

                  2)URL路径:

<Location "">   … … </Location>

<LocationMatch ""> …...</LocationMatch>

 

   7.定义默认主页面DirecotryIndex    index.html   index.html.var

用户访问时,定义多个主页多个的时候,工作向右逐个遍历,若都无法找到

  1)报错&重新指向错误提示页面

 2)返回索引列表,危险,一般仅用在下载站点

 

 

   8.Directory中“基于来源地址”实现访问控制

      (1)Options:此目录内资源访问属性,后跟1个或多个以空白字符分隔的“选项”列表

   所有可用特性:IndexesIncludesFollowSymLinksSymLinksifOwnerMatchExecCGIMultiViewsNoneAll

Indexes

默认启用,指明URL路径下不存在与定义的主页面资源相符文件时,返回索引列表给用户,危险

Includes

允许启动服务器包含

FollowSymLinks

允许跟踪符号链接文件所指向的源文件;

SymLinksifOwnerMatch

允许跟踪符号链接文件,但是原文件的和连接文件的属主属组相同

ExecCGI

允许执行CGI脚本

MultiViews

允许做内容协商,十分消耗资源且不安全

None

全部不可以

All

全部可以访问

       (2)AllowOverride

    与访问控制相关的哪些指令可以放在.htaccess文件(每个目录下都可以有一个),使用改机制会是站点十分消耗资源

    对目录解析的性能影响十分的,一般不使用

All:全部可以放入

None:全部不可以放入

      (3)order和allow、deny基于来源地址的一组指令

   order:定义生效次序;写在后面的表示默认法则;

  Allow from, Denyfrom明确定义来源地址,可以为IP或者NetAddr网络地址

NetAddr格式可以为172.16172.16.0.0172.16.0.0/16172.16.0.0/255.255.0.0

 

 

   9.定义路径别名

格式:Alias  /URL/ "/PATH/TO/SOMEDIR/"

DocumentRoot"/www/htdocs"

http://www.xuding.com/download/bash-4.4.2-3.el6.x86_64.rpm

/www/htdocs/download/bash-4.4.2-3.el6.x86_64.rpm

Alias  /download/ "/rpms/pub/"

http://www.xuding.com/download/bash-4.4.2-3.el6.x86_64.rpm

/rpms/pub/bash-4.4.2-3.el6.x86_64.rpm

http://www.xuding.com/p_w_picpaths/logo.png

/www/htdocs/p_w_picpaths/logo.png

 

   10.设定默认字符集

AddDefaultCharset  UTF-8

添加指定的字符集

支持的中文字符集:GBK,GB2312, GB18030

 

 

   11.日志设定

         (1)错误日志:

ErrorLog    logs/error_log

错误日志位置

LogLevel    warn

日志级别,级别越高记录的信息越少

可使用的级别有:debug,info, notice, warn, error, crit, alert, emerg

         (2)访问日志:

CustomLog  logs/access_log  combined   记录的格式

LogFormat "%h %l %u %t\"%r\" %>s %b \"%{Referer}i\"\"%{User-Agent}i\"" combined   不同格式定义

%h

Remote  host,客户端IP地址;

%l

Remote  logname (from identd, if supplied)远程登录名,-表示为空;

%u

Remote  user,  (from auth; may be bogus if  return status (%s) is 401);基于用户名认证登录时认证名记录

%t

Time  the request was received (standard english format),服务器收到请求的标准英文格式时间;

\"

转意符号显示"本身,不与最外层引用的冲突

%r

First  line of request,请求报文的道行信息(method url version);???

%>s

响应状态码;

%b

响应报文的大小,单位是字节,不包括响应报文http首部;

%{Referer}I

请求报文当中"referer"首部的值;当前资源的访问入口,即从哪个页面中的超链接跳转而来;

%{User-Agent}I

请求报文当中"User-Agent"首部的值;即发出请求用到的应用程序;

LogFormatformatstrings:详情:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

 

 

 

三、基于用户的访问控制配置httpd服务

   1.认证质询

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

     (1)认证:

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

          2)认证类型:basic明文认证;digest消息摘要认证

     (2)安全域

              需要用户认证后方能访问的路径;应该通过名称对其进行标识,并用于告知用户认证的原因;

     (3)用户的账号和密码存储

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

  存储位置:文本文件SQL数据库ldap轻量级目录访问协议、nis

 

    2.basic认证演示:

       (1)在主配置文件中定义安全域

<Directory "…  ...">


Options  … ...

定义资源访问属性方法

AllowOverride None

是否允许在.htaccess存放

AuthType Basic

指明认证类型

AuthName  "STRING"

认证提示框信息,通过字符串给出即可

AuthUserFile  "/PATH/TO/HTTPD_USER_PASSWD_FILE"

认证时候用户的账号密码文件

Require user  username1 username2 …

可登陆的用户

允许账号文件中所有用户登录:Require  valid-user

</Directory>


       (2) 提供账号和密码存储(文本文件)

      htpasswd[options] passwordfile username

           -h: 获取帮助

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

-m:md5加密用户密码;

-s:sha1加密用户密码;

-D:删除指定用户

       (3) 实现基于组进行认证

<Directory  "">        


Options  … ...

定义资源访问属性方法

AllowOverride None

是否允许在.htaccess存放

AuthType  Basic 


AuthName  "STRING"


AuthUserFile  "/PATH/TO/HTTPD_USER_PASSWD_FILE"


AuthGroupFile  "/PATH/TO/HTTPD_GROUP_FILE"


Require group  GROUP1 GROUP2 …


</Directory>        


要提供:用户账号文件和组文件;

组文件:每一行定义一个组,自己创建一个文件即可

GRP_NAME:user1 user2  user3 ...

示例:

<Directory"/www/htdocs/admin">

    Options None

    AllowOverride None

    AuthType Basic

    AuthName "Administator private"

    AuthUserFile"/etc/httpd/conf.d/.htpasswd"

    AuthGroupFile"/etc/httpd/conf.d/.htgroup"

    Require group webadmin

</Directory>

 

 

 

 

四、httpd虚拟主机配置

   1.实现方案:

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

         基于port:为每个虚拟主机使用至少一个独立的port;

         基于FQDN:为每个虚拟主机使用至少一个FQDN;

             注意:

       1)一般虚拟机不要与中心主机混用;因此,要使用虚拟主机,得先禁用"main"主机;

      2)配置"main"的一些指令,虚拟主机同样适用

     3)通过Http协议的报文首部来进行识别判断访问

 

   2.虚拟主机的配置方法:

<VirtualHost  IP:PORT>

ServerNameFQDN

DocumentRoot  "  "

</VirtualHost>

         (1)基于IP的虚拟主机示例

<VirtualHost172.16.100.6:80>

ServerNamewww.a.com

DocumentRoot"/www/a.com/htdocs"

</VirtualHost>

<VirtualHost172.16.100.7:80>

ServerNamewww.b.net

DocumentRoot"/www/b.net/htdocs"

</VirtualHost>

<VirtualHost172.16.100.8:80>

ServerNamewww.c.org

DocumentRoot"/www/c.org/htdocs"

</VirtualHost>

         (2)基于端口的虚拟主机:

<VirtualHost172.16.100.6:80>

ServerNamewww.a.com

DocumentRoot"/www/a.com/htdocs"

</VirtualHost>

<VirtualHost172.16.100.6:808>

ServerNamewww.b.net

DocumentRoot"/www/b.net/htdocs"

</VirtualHost>

<VirtualHost172.16.100.6:8080>

ServerNamewww.c.org

DocumentRoot"/www/c.org/htdocs"

</VirtualHost>

         (3)基于FQDN的虚拟主机:

NameVirtualHost172.16.100.6:80

<VirtualHost172.16.100.6:80>

ServerNamewww.a.com

DocumentRoot"/www/a.com/htdocs"

</VirtualHost>

<VirtualHost172.16.100.6:80>

ServerNamewww.b.net

DocumentRoot"/www/b.net/htdocs"

</VirtualHost>

<VirtualHost172.16.100.6:80>

ServerNamewww.c.org

DocumentRoot"/www/c.org/htdocs"

</VirtualHost>                                        

   注意:http2.2配置基于FQDN的虚拟主机时候需要指明NameVirtualHost

 

 

 

五、内置的status页面

   1.配置信息:

实例:基于URL访问路径

         <Location /server-status>

    SetHandler server-status

    Order deny,allow

    Deny from all

    Allow from 172.16

          </Location>

   2.重启服务

[root@localhostconf.d]# service httpd reload

Reloadinghttpd:

   3.访问:http://172.16.249.210/server-status

注意:此处应为不能给其他人所见,所以一般会和基于用户的认证去配置

httpd(2.2&2.4)RPM搭建配置定义详解_httpd(2.2&2.4)RPM搭建配_07

Apache Server  Status for 172.16.249.210

172.16.249.210Apache服务器状态

Server Version:  Apache/2.2.15 (Unix) DAV/2

pache服务器版本

Server Built: Jul  24 2015 11:52:28


Current Time:  Tuesday, 12-Jan-2016 21:15:24 CST


Restart Time:  Tuesday, 12-Jan-2016 21:14:40 CST


Parent Server  Generation: 1


Server uptime: 43  seconds


1 requests  currently being processed, 7 idle workers


_W______........................................................

................................................................

................................................................

................................................................

目前启动的进程和状态

每个字母、短下划线和点表示一个进程

此处有256个进程

Scoreboard Key:

"_"  Waiting for Connection, "S" Starting up, "R" Reading  Request,

"W"  Sending Reply, "K" Keepalive (read), "D" DNS Lookup,

"C"  Closing connection, "L" Logging, "G" Gracefully  finishing,

"I" Idle  cleanup of worker, "." Open slot with no current process

状态解释

PID Key:

   3390 in state: _ ,   3391 in state: W ,   3392 in state: _

   3393 in state: _ ,   3394 in state: _ ,   3395 in state: _

   3396 in state: _ ,   3397 in state: _ ,

显示进程的进程号、状态


本文出自 “许鼎的博客” 博客,请务必保留此出处http://xuding.blog.51cto.com/4890434/1734376