httpd介绍

httpdApache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。通常,httpd不应该被直接调用,而应该在类Unix系统中由apachectl调用。

  1. http的一些软件包

    httpd               主软件包;

       httpd-devel         http相关的开发包;

       httpd-manual         官方提供的手册;

 httpd-tools         httpd相关的工具(包括一些测试工具);

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

    工作目录:/etc/httpd

    配置文件存放目录:/etc/httpd/conf/;

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

    扩展配置文件:/etc/httpd/conf.d/*.conf;

    socket:http(80/tcp),https(443/tcp);

    配置文件:/etc/httpd/conf/httpd.conf   或者/etc/httpd/conf.d/*.conf 以conf结尾的文件

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

     脚本配置文件:/etc/sysconfig/httpd

     模块目录:/etc/httpd/modules(链接文件)

                     /usr/lib64/httpd/modules     

      主程序:/usr/sbin/httpd: prefork

                     /usr/sbin/httpd.event:event

                     /usr/sbin/httpd.worker:worker

      日志文件目录:/var/log/httpd

                              access_log: 访问日志

                              error_log: 错误日志

        站点文档根目录:/var/www/html/p_w_picpaths/a.jpg

  1. http报文

    HTTP资源请求的方法:GETPUTHEAD(只发报文首部响应就可以)、POSTDELETE

                     GET:请求获取一个资源,需要服务器发送

       HEAD:跟GET相似,但其不需要服务发送资源而仅传回响应首部;

       POST:支持HTML表单提交,表单中有用户填入的数据,这些数据会发送到服务器端,由服务器存储至某位置(例如发送处理程序)

       PUT:与GET相反,向服务写入文档;例如发布系统

       DELETE:请求删除URL指向的资源

  1. http状态码:

                      1xx:信息性状态码

2xx:成功状态码

                                200: OK

                                201: Created,接受并保存

                         3xx:重定向状态码

                                       301:Moved Permanently, 永久重定向

                                       302:Found,临时重定向

                  304:Not Modified,没修改这个资源,就可以使用缓存

              4XX:客户端类错误

                           403:Forbidden,请求被服务器拒绝

                    404Not Found,服务器无法找到请求的URL

                                         405Method Not Allowed,不允许使用此方法请求相应的URL

                               5xx:服务器类的错误

                    500Internal Server Error,服务器内部错误

                    502Bad Gateway, 代理服务器从上游服务器收到

                   503Service Unavailable,服务器此时无法提供服务,但将来可能可用

  1. MPM Multipath Processing Module多道处理模块,非一个模  块,而是对一种特性的称谓

    prefork:

              一个进程一个请求,预先forck好多个,prefork是基于事件分离器来工作的,而select的文件数最大不能超过1024个,也就是说prefork最多能处理1024个进程

           worker:

              一个进程多个线程,一个线程一个请求

           event:

              一个线程响应多个请求。event是基于事件驱动(event-driven)的,主要目的在于实现单线程响应多个请求;

<IfModule prefork.c>

StartServers      8        #→默认启动的工作进程数;

MinSpareServers   5        #→最少空闲工作进程数,保存备用

MaxSpareServers  20        #→最大空闲工作进程数,保存备

ServerLimit     256        #→最大活动工作进程数;

MaxClients      256        #→并发请求的最大数;

MaxRequestsPerChild 4000   #→每个子进程在生命周期内所能够服务的最多请求个数


prefork采用的是预派生子进程方式,用子进程处理不同的请求, 每个请求对应一个子进程,进程之间是彼此独立的。当apache启动后会先启动StartServers个子进程,等待1秒后会再创建两个,再等待1秒后创建4个,再一秒后创建8个这样直到创建满MinSpareServers个子进程为止,MaxSpareServers的值代表最大的待命进程数,如果待命进程数大于这个apache会自动kill掉多余没有启用的进程


<IfModule worker.c>

StartServers        4  #→启动的子进程的个数;

MaxClients        300  #→并发请求的最大数,保存备用;

MinSpareThreads    25  #→最小空闲线程数;保存备用;

MaxSpareThreads    75  #→最大空闲线程数;

ThreadsPerChild    25  #→每个子进程可生成的线程数;

MaxRequestsPerChild  0  #→每个子进程在生命周期内所能够服务的最多请求个数,0表示不限定;

</IfModule>

worker的工作原理是,由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而"MaxClients"设置了所有子进程中的线程总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。 

6,DSO模块加载方式

      LoadModulemodule_name /path/to/module

7,配置站点根目录

      DocumentRoot/path/to/somewhere

8,配置页面访问属性

      <Direcotry"/path/to/somewhere">

          Options:

              Indexes: 缺少指定的默认页面时,允许将目录中的所有文件以列表形式返回给用户;危险;

              FollowSymLinks:跳跃符号链接           

None: 所有都启用

              All: 所有都启用

              ExecCGI: 允许使用mod_cgi模块执行CGI脚本

              Includes: 允许使用mod_include模块实现服务器端包含(SSI);

              MultiViews:允许使用mod_negotiation实现内容协商

               AllowOverride

            支持在每个页面目录下创建.htaccess用于实现对此目录中资源访问时的访问控制功能

              SymLinksIfOwnerMatch:在链接文件属主属组与原始文件的属主属组相同时允许跟随符号链接所指向的原始文件;

      <Directory>

 

9,配置日志功能

      /var/log/httpd/

      access.log:访问日志,其需要记录的内容需要自定义

      error.log:错误日志

        ErrorLog "/path/to/error_log"

        LogLevel{debug|info|notice|warn|error|crit|alert|emerg}

 

        LogFormat

        CustomLog"/path/to/access_log" LogFormat_Name

 

           %h: 客户端地址

           %l: 远程登录名,通常为-

           %u: 认证时输入用户名,没有认证时为-

           %t: 服务器收到 用户请求时的时间

           %r:请求报名的起始行

           %>s: 响应状态码

           %b: 响应报文的长度,单位是字节

           %{HEADER_NAME}i: 记录指定首部对应的值

  1. 配置虚拟主机

    1,基于IP虚拟主机的实现

    打开web服务的主配置文档:vim/etc/httpd/conf/httpd.conf

    DocumentRoot 注释掉然后,在<virtualHost>下配置

<VirtualHost192.168.0.100:80>
DocumentRoot "/www/1.com"
ServerName  www.1.com
< VirtualHost/>
< VirtualHost 192.168.0.101:80>
DocumentRoot "/www/2.com"
ServerName www.2.com
< VirtualHost/>

vim /etc/hosts

192.168.0.100 www.1.com

192.168.0.101 www.2.com

浏览器中输入IP地址进行实验效果的验证。

(2)基于端口:在Listen行再添加Listen 8080端口
<VirtualHost 192.168.0.100:80>
DocumentRoot "/www/1.com"
ServerName  www.1.com
< VirtualHost/>
< VirtualHost 192.168.0.101:8080>
DocumentRoot "/www/2.com"
ServerName  www.2.com
< VirtualHost/>

基于主机名:
开启:NameVirtualHost192.168.0.100:80
< VirtualHost *:80>
    ServerAdmin    www.1.com
    DocumentRoot /etc/httpd/www/1.com
    ServerName caoshujia.com
  ErrorLog logs/var/log/httpd/www1.err
  CustomLog logs//var/log/httpd/www1.access common
< /VirtualHost>
< VirtualHost *:80>
    ServerAdmin    www.2.com
    DocumentRoot /etc/httpd/www/2.com

ErrorLog logs/var/log/httpd/www2.err

CustomLog logs/var/log/httpd/www2.accesscommon

</VirtualHost>供两个基于名称的虚拟主机:

                         (a)www1.stuX.com,页面文件目录为/web/vhosts/www1;错误日志为/var/log/httpd/www1.err,访问日志为/var/log/httpd/www1.access

                         (b)www2.stuX.com,页面文件目录为/web/vhosts/www2;错误日志为/var/log/httpd/www2.err,访问日志为/var/log/httpd/www2.access

                         (c)为两个虚拟主机建立各自的主页文件index.html,内容分别为其对应的主机名;

                         (d)通过www1.stuX.com/server-status输出httpd工作状态相关信息,且只允许提供帐号密码才能访问(status:status)

  1,安装web

      Yum install httpd

  2,配置文档vim/etc/httpd/conf/httpd.conf

      <VirtualHost 172.16.31.30:80>

    DocumentRoot /web/vhosts/www1

    ServerName www1.stuX.com

    ErrorLog /var/log/httpd/www1.err

    CustomLog /var/log/httpd/www1.access common

 </VirtualHost>

 

<VirtualHost172.16.31.30:80>

    DocumentRoot /web/vhosts/www2

    ServerName www2.stuX.com

    ErrorLog /var/log/httpd/www2.err

    CustomLog /var/log/httpd/www2.access common

 </VirtualHost>

 

这个文件是基于用户访问控制

<Directory "web/vhosts/www1,2">     
               Options Indexes

AuthType basic
               AllowOverride AuthConfig
               AuthName "admin area"
               AuthUserFile /etc/httpd/conf/.htpasswd    
如果文件不存在需要创建
               Require user status
               Order allow,deny
               Allow from all
        </Directory>

 

 

htpasswd

                      -c: 如果此文件事先不存在,则创建;注意,只能在创建第一个用户时使用;

                       -mmd5的格式编码存储用户的密码信息

                       -D删除指定用户

htpasswd -cm/etc/httpd/.htpasswd status   这个是建立认证,输完命令后,会提示你输入密码,密码为status

3,然后再/web/vhosts/www1下建立index.html文件,编写内容为abc,在/web/vhosts/www2下建立index.html,编写内容ABC

4service httpd restart 重启动web服务

 

 

在此基础上在扩展在建立ssl认证。

ssl会话基于IP地址创建,所以,每一个IP仅创建一个SSL会话;ssl握手要完成的工作有:1 交换协议版本号;2选择双方都支持的加密方式,3客户端对服务器端实现身份验正;4密钥交换

1 安装mod_ssl模块

    # yum installmod_ssl

2为服务端生成私钥,并为其提供证书

    [root@localhostCA]# (umask 077; openssl genrsa -out private/cakey.pem 2048)

Generating RSA private key, 2048 bit long modulus

......................................................................................................................+++

..................................................................................................................................+++

e is 65537 (0x10001)                       生成私钥

提供证书:

[root@localhost CA]# openssl req -new -x509 -keyprivate/cakey.pem -out cace.pem -days 30

Country Name (2 letter code) [XX]:CN

State or Province Name (full name) []:HA

Locality Name (eg, city) [Default City]:ZZ

Organization Name (eg, company) [Default CompanyLtd]:CS 

Organizational Unit Name (eg, section) []:Ops

Common Name (eg, your name or your server's hostname)[]:caserver.mageedu.com

Email Address []:

[root@localhost CA]# touch serial index.txt

[root@localhost CA]# echo 01 > serial

 

然后进入/etc/httpd/ssl目录下,创建httpd1.key

[root@localhost ssl]# (umask 077; opensslgenrsa -out httpd1.key 1024)

Generating RSA private key, 1024 bit longmodulus

.................++++++

............++++++

e is 65537 (0x10001)

[root@localhost ssl]# ls

httpd1.key  httpd.crt httpd.csr  httpd.key

 

[root@localhost ssl]# (umask 077; opensslgenrsa -out httpd1.key 1024)

Generating RSA private key, 1024 bit longmodulus

.................++++++

............++++++

e is 65537 (0x10001)

[root@localhost ssl]#openssl ca -in httpd1.csr -out httpd1.crt -days 30

签证

然后进入/etc/httpd/conf.d目录下,编辑ssl.conf文件

SSLCertificateFile/etc/httpd/ssl/httpd.crt

SSLCertificateKeyFile/etc/httpd/ssl/httpd.key

DocumentRoot "/web/vhosta" 这个文件和上文中配置文件目录保持一致

ServerName www.caoshujia.com

然后重启服务 servicehttpd restart

测试,输入www.caoshujia.com

 

Httpd编译安装

  1. 安装开发包组:Developmenttools,ServerPlatform Development,DesktopPlatform Development

  2. 安装apr和apr-util 主要为上层应用程序提供一个可以跨越操作系统平台使用的底层支持接口库。

  3. # tar xf apr-1.5.0.tar.bz2 

    # cd apr-1.5.0

    # ./configure--prefix=/usr/local/apr  为了不让覆盖原有的文件,新增一个目录

    # make&&make install

    # tar xfapr-util-1.5.3.tar.bz2 

    # cd apr-util-1.5.3

    # ./configure--prefix=/usr/local/apr-util --with-apr=/usr/local/apr/

    # make &&make install

    安装完成

    安装httpd-2.4.9

    # tar xf httpd-2.4.9.tar.bz2 

    # cd httpd-2.4.9

    # ./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-mpms-shared=all --with-mpm=event --enable-modules=most

              # make &&make install

    4配置主配置文件

    # vim /etc/httpd24/httpd.conf

# Virtual hosts

Include /etc/httpd24/extra/httpd-vhosts.conf

若想启用虚拟主机,先注释

#DocumentRoot "/usr/local/apache/htdocs"

然后启用虚拟主机选项

Include /etc/httpd24/extra/httpd-vhosts.conf

注释掉当前虚拟主机配置,然后编写虚拟主机配置文件,重启服务。