首页 > 代码库 > HTTPD服务详解

HTTPD服务详解

HTTPD服务详解



目录

  一、httpd的程序版本

  二、httpd的特性

  三、httpd的功能特性

  四、httpd使用

   1、httpd的安装

   2、程序环境

    Httpd-2.2 (Centos6)

    http-2.4 (Centos7)

  五、http配置相关说明

   1.修改监听的ip和port

   2、持久连接

   3、MPM

   4、DSO配置指令模块加载

   5、定义Main’server文档页面路径

   6、站点访问控制

    文件系统路径

    URL路径

   7、<Directory> 中基于源地址实现访问控制

    Options

    AllowOverride

    Order 和allow 、deny

   8、定义站点主页面

   9、定义路径别名

   10、设定默认字符集

   11、日志设定

    错误日志

    访问日志

    日志格式选项

   12、基于用户的访问控制

    定义安全域

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

   13、虚拟主机

    三种实现方案

    基于ip的虚拟主机示例

    基于端口的示例

    基于FQDN (域名)示例

   14、Status页面 (服务器状态)

   15、curl命令

   16、user/group

   17、使用mod_deflate模块压缩页面优化传输速度

    使用场景:

   18、HTTPS协议https

    SSL协议会话过程

    https实现过程

   19、httpd自带的工具程序

    Httpasswd

    Apachectl

    Apxs

    Rotatelogs

    Suexec

    Ab压测工具 20



前言

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

        httpd早期叫做apache----a patcy server ,属于Apache软件基金会(ASF:Apache software foundation)的一个项目,后来apache更名为Httpd,因为这样更符合Http server的含义。 常见的http服务器程序有httpd(Apache)、Nginx、Lighttpd。


一、httpd的程序版本

httpd1.3 :官方已经停止维护

httpd2.0

httpd2.2

httpd2.4 目前最新稳定版

如果想了解具体介绍可以自行google


二、httpd的特性

        高度模块化 核心模块+功能模块

        DSO dynamic share object 动态装卸载

        多路处理模块机制MPM( Multipath processing Modules)

    1、MPM多路处理模块机制

        Prefork 多进程模型,每个进程响应一个请求,一个主进程,多个子进程

一个主进程:负责生成子进程及回收子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;

N个子进程:每个子进程处理一个请求;

            图示:

技术分享


 

    Worker 多进程多线程模型,每个线程响应一个请求, M*N

工作模式

一个主进程:负责生产子进程;

多个子进程:每个子进程负责生成多个线程;

每个线程:负责响应用户请求;

并发响应数量 :M*N

M:子进程数量

N:每个子进程所能创建的最大线程数量;

            图示:

技术分享


      Event 事件驱动模型,一个进程响应多个请求

一个主进程:负责生成子进程;负责创建套架子;负责接收请求,并将其牌发给某子进程处理;

子进程:基础时间驱动机制直接影响多个请求;

http2.2:仍为测试使用模型

http2.4event可生产环境使用

            图示:

技术分享

 

三、httpd的功能特性

    CGI: Common Gateway Interface

    虚拟主机:基于IP,基于端口,基于FQDN

    反向代理

    负载均衡

    路径别名

    丰富的用户认证机制

         Basic

         Digest

    支持扩展的第三方模块

四、httpd使用

    1、httpd的安装

Rpm包:centos 发行版中提供

编译安装:定制功能,或其他原因


    2、程序环境

    Httpd-2.2 (Centos6)

配置文件:

/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:

access_log :访问日志

error_log: 错误日志

站点文档:

/var/www/html   (默认)

模块文件路径:

/usr/lib64/modules

服务控制和启动

Chkconfig httpd on|off

Service {start|stop|restart|statsu|reload} httpd

    http-2.4 (Centos7)

配置文件

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

/etc/httpd/conf.d/*.conf 扩展配置文件(可自主创建)

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

Systemd unit file

/usr/lib/systemd/system/htttpd.service

主程序文件:

/usr/sbin/httpd

Httpd 2.4支持MPM的动态切换

模块文件路径

/usr/lib64/modules

服务控制和启动

Systemctl enable|disable httpd.service

Sysyemctl {start|stop|restart|status|reload} httpd.service


五、http配置相关说明

    1.修改监听的ip和port

    Listen [ip:]port

  省略ip表示0.0.0.0

    Listen 指令可重复出现多次

    Listen 80

    Listen 8080

    修改监听socket ,重启服务进程方可有效。


    2、持久连接

Persistent connention :tcp连接建立后,每个资源获取完成后不全断开连接,而是继续等待将其他资源请求的进行;

如何断开?

数量限制

时间限制

副作用:对并发访问量较大的服务器,长连接机制会使得后续的某些请求无法得到正常响应;       折衷做法:使用较短的持久连接时长,以及较少的请求数量

KeepAlive on|off

KeepAlivetimeout 15  时间

MAXkeepAliceRequests 100 数量

测试方式:

    [wang@centos7_1 ~]$ telnet www.linux.top 80

            Trying 172.16.250.240...

            Connected to www.linuxinfo.top.

            Escape character is ‘^]‘.

            GET /index.html http1.1

            Host:172.16.250.240   #此处两处回车

    

            HTTP/1.1 200 OK

            Date: Thu, 22 Dec 2016 15:29:44 GMT

            Server: Apache/2.4.6 (CentOS) PHP/5.4.16

            Last-Modified: Sun, 11 Dec 2016 12:29:57 GMT

            ETag: "5-54361251beb00"

            Accept-Ranges: bytes

            Content-Length: 5

            Connection: close

            Content-Type: text/html; charset=UTF-8

    

            mage  #此处为首页内容

            Connection closed by foreign host.


    3、MPM

Httpd-2.2不支持同时编译多个MPM模块,所以只能编译选定要使用的那个;Centos6的rpm包为此专门提供了三个应用程序文件,httpd(profork) ,httpd.worker, httpd.event ,分别用于实现对不同的MPM机制的支持;确认现在使用的是哪个程序文件的方法:

ps aux |grep httpd

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

查看httpd程序的模块列表:

查看静态编译的模块:

#httpd –l

查看静态编译及动态编译的模块:

#httpd –M

更换支持不同的MPM的主程序:

编辑/etc/sysconfig/httpd

HTTPD变量

HTTPD=/usr/sbin/httpd.{worker|event}

注意:重启服务方可生效

MPM配置

Prefork 配置

<IfModule prefork.c>

        StartServers       8

        MinSpareServers    5

        MaxSpareServers   20

        ServerLimit      256

        MaxClients       256

        MaxRequestsPerChild  4000

        </IfModule>

        

startServers:设置服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所有一般没有必要调整这个参数。

  MinSpareServers:设置空闲子进程的最小数量。所谓空闲子进程是指没有正在处理请求的子进程。如果当前空闲子进程数少于 MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。只有在非常繁忙机器上才需要调整这个参数。将此参数设的太大通常是一个坏主意。

    MaxSpareServers:设置空闲子进程的最大数量。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。只有在非常繁忙机器上才需要调整这个参数。将此参数设的太大通常是一个坏主意。如果你将该指令的值设置为比MinSpareServers 小,Apache将会自动将其修改成"MinSpareServers+1"。

   ServerLimit:服务器允许配置的进程数上限。只有在你需要将MaxClients设置成高于默认值256的时候才需要使用。要将此指令的值保持和MaxClients一样。修改此指令的值必须完全停止服务后再启动才能生效,以restart方式重启动将不会生效。

 MaxClients:用于伺服客户端请求的最大请求数量(最大子进程数),任何超过MaxClients限制的请求都将进入等候队列。默认值是256,如果要提高这个值必须同时提高ServerLimit的值。笔者建议将初始值设为(以Mb为单位的最大物理内存/2),然后根据负载情况进行动态调整。比如一台4G内存的机器,那么初始值就是4000/2=2000。

  MaxRequestsPerChild:设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:可以防止(偶然的)内存泄漏无限进行而耗尽内存;

给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。如果设置为非零值,笔者建议设为10000-30000之间的一个值。

       公式:

   MaxClients<=ServerLimit


        worker 配置



        <IfModule worker.c>

        StartServers         4

        MaxClients         300

        MinSpareThreads     25

        MaxSpareThreads     75

        ThreadsPerChild     25

        MaxRequestsPerChild  0

        </IfModule>

StartServers:设置服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所有一般没有必要调整这个参数。

     ServerLimit:服务器允许配置的进程数上限。只有在你需要将MaxClients和ThreadsPerChild设置成需要超过默认值16个子进程的时候才需要使用这个指令。不要将该指令的值设置的比MaxClients 和ThreadsPerChild需要的子进程数量高。修改此指令的值必须完全停止服务后再启动才能生效,以restart方式重启动将不会生效。

        ThreadLimit:设置每个子进程可配置的线程数ThreadsPerChild上限,该指令的值应当和ThreadsPerChild可能达到的最大值保持一致。修改此指令的值必须完全停止服务后再启动才能生效,以restart方式重启动将不会生效。

        MaxClients:用于伺服客户端请求的最大接入请求数量(最大线程数)。任何超过MaxClients限制的请求都将进入等候队列。默认值是"400",16 (ServerLimit)乘以25(ThreadsPerChild)的结果。因此要增加MaxClients的时候,你必须同时增加 ServerLimit的值。笔者建议将初始值设为(以Mb为单位的最大物理内存/2),然后根据负载情况进行动态调整。比如一台4G内存的机器,那么初始值就是4000/2=2000。

        MinSpareThreads:最小空闲线程数,默认值是"75"。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太少,子进程将产生新的空闲线程。

        MaxSpareThreads:设置最大空闲线程数。默认值是"250"。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太多,子进程将杀死多余的空闲线程。MaxSpareThreads的取值范围是有限制的。Apache将按照如下限制自动修正你设置的值:worker要求其大于等于 MinSpareThreads加上ThreadsPerChild的和。 

        ThreadsPerChild:每个子进程建立的线程数。默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了。每个子进程所拥有的所有线程的总数要足够大,以便可以处理可能的请求高峰。

      MaxRequestsPerChild:设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:可以防止(偶然的)内存泄漏无限进行而耗尽内存;给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。如果设置为非零值,笔者建议设为10000-30000之间的一个值。

         公式:

         ThreadLimit >= ThreadsPerChild

         MaxClients <= ServerLimit * ThreadsPerChild 必须是ThreadsPerChild的倍数

         MaxSpareThreads >= MinSpareThreads+ThreadsPerChild


    4、DSO配置指令模块加载  

        格式:

        loadModule <mod_named> <mod_path>

模块文件路径可使用相对路径:

相对于serverRoot (默认/etc/httpd)

注意:修改后 service reload httpd 重新加载配置文件


    5、定义Main’server文档页面路径

        DocumentRoot “/path”

文档路径映射:

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

其相当于站点URL的根路径

(filesystem)/web/host1/index.html(URL)/index.html

    6、站点访问控制

        可基于两种机制指明对那些资源进行何种控制访问

        文件系统路径

<Directory “”>

… 

</Directory> //对目录下所有资源实现访问控制

<File “”>

</File>

<FileMath “PATTERN”>

</FileMath> //使用正则表达式模式匹配进行访问控制

        注意:正则表达式要启用正则表达式引擎,效率会降低很多。

        URL路径

<Location “”>

….

</Location>

<LocationMath “”>

….

</LocationMath>


    7、 <Directory> 中基于源地址实现访问控制

    Options

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

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

ExecCGI: 在该目录下允许执行CGI脚本。

SymLinksIfOwnerMatch: 当使用符号连接时,只有当符号连接的文件拥有者与实际文件的拥有者相同时才可以访问。

    AllowOverride 

        与访问控制相关的那些指令可以放在.htaccess文件(每个目录下都可以有一个)中;

All :所有的都启用

None:none

    Order 和allow 、deny

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

    Allow from ,Deny from

来源地址

IP 地址

NetAddr  (网络地址):

172.16

172.16.0.0

172.16.0.0/16

172.16.0.0/255.255.0.0

例如:

Order allow,deny

Deny form 172.16.100.2  拒绝172.16.100.2 访问

    Allow from 172.16.0.0/16  允许172.16.0.0/16网络内的地址访问除100.2之外。

    8、定义站点主页面

        Directoryindex index.html index.html.var

    9、定义路径别名

        格式:

Alias /URL/  “/PATh/TO/SOMEDIR”

例如:

Alias /download/   “/apps/www/download”

   http://www.mage.com/download/ 

在访问www.magedu.com/download 的时候访问的真实地址为/apps/www/download

    10、设定默认字符集

        AddDefaultCharset UTF-8

中文字符集 GBK, GBK2312, GBK18030

    11、日志设定

日志类型:访问日志和错误日志

    错误日志

ErrorLog  logs/error_log   错误日志文件

LogLevel warn

Possible values include: debug, info, notice, warn, error, crit, alert, emerg. 8种

    访问日志:

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

CustomLog  logs/access_log (文件) combined (日志格式格式串名称)

官方文档地址:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html

    日志格式选项

%h :Remdo host 客户端主机(ip)

%l :客户端通过identid登录时使用的名称,一般为”-“号

%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 请求报文的首行;记录了此次请求的“方法“,”URL“,以及”协议版本“<motd> <url> <version>

%>s:响应状态码

%b :size of respons in bytes,excluding HTTP heards 响应报文的大小,单位是字节;不包括响应报文的http首部信息

%{Rsferer}i :请求报文中首部“referer“的值;即从那个页面的超链接跳转至当前页面的。

%{User-Agent}:请求报文中首部“User-Agent”的值;即发出请求的应用程序; 


12、基于用户的访问控制

  认证质询:

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

认证:

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

认证方式:两种

Basic :明文

Digest:消息摘要认证

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

用户的帐号和密码存放于何处?

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

存储:

文本文件:

SQl数据库;

Lasp目录存储;

       Basic认证配置示例:

    定义安全域   

<Directory “目录”>
        Options None
      AllowOverride None
        AuthType Basic
        AuthName “string”
        AuthUserFile “/path/to/httpd_user_passwd_file”
        Require user username1 username2….
</Directory>


允许账户文件中的所用用户

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

使用专用命令完成此类文件的创建及用户管理

Htpasswd [options] /path/to/httpd_passwd_file username

-c :自动创建此处指定的文件,因此,仅应该再次文件不存在时使用

-m:md5 格式加密

-s:  sha格式加密

-D : 删除指定的用户

另外;基于组帐号进行认证;

    创建用户帐号和组帐号文件;

    组文件:每一行定义一个组,格式

Group_name:user1 user2

13、虚拟主机

    站点标识:socket

  Ip相同,但端口不同

  Ip不同,但端口均为默认端口

  FQDN不同:

 请求报文首部

Host:www.mage.com

    三种实现方案:

基于ip:

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

基于port :

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

基于FQDN

为每个虚拟主机使用至少一个FQDN

注意:一般虚拟机不要与中心主机混用;因此,要使用虚拟主机,得先今夜main主控;

禁用方法:注释中心主机的DocumentRoot 指令即可;

虚拟主机的配置方法:

<VirtualHost ip:port>

ServerName FQDN

DocumentRoot “”

</VirtualHost>

其他可用指令:

ServerAlias :虚拟主机的别名;可多次使用

ErrorLog :指定错误日志文件

CustomLog:指定访问日志文件

<Directory>

</Directory>

Alias


基于ip的虚拟主机示例:

<VirtualHost 172.16.250.90:80>
        DocumentRoot /apps/www/html/
        ServerName www.linuxinfo.com
        ErrorLog logs/www.linuxinfo-error_log
        Customlog logs/www.linuxinfo-access_log common
</VirtualHost>
<VirtualHost 172.16.76.20:80>
        DocumentRoot /apps/bbs/html/
        ServerName bbs.linuxinfo.com
        ErrorLog logs/bbs.linuxinfo-error_log
        Customlog logs/bbs.linuxinfo-access_log common
</VirtualHost>



基于端口的示例:

<VirtualHost 172.16.250.90:80>
        DocumentRoot /apps/www/html/
        ServerName www.linuxinfo.com
        ErrorLog logs/www.linuxinfo-error_log
        Customlog logs/www.linuxinfo-access_log common
</VirtualHost>
<VirtualHost 172.16.250.90:8080>
        DocumentRoot /apps/bbs/html/
        ServerName bbs.linuxinfo.com
        ErrorLog logs/bbs.linuxinfo-error_log
        Customlog logs/bbs.linuxinfo-access_log common
</VirtualHost>



    基于FQDN (域名)示例:

  

        NameVirtualHost 172.16.250.90:80 (Centos 7 配置FQSN虚拟主机时不在需要此指令)
     <VirtualHost 172.16.250.90:80>
          DocumentRoot /apps/www/html/
         ServerName www.linuxinfo.top
         ErrorLog logs/www.linuxinfo-error_log
         Customlog logs/www.linuxinfo-access_log common
     </VirtualHost>
      <VirtualHost 172.16.250.90:80>
          DocumentRoot /apps/bbs/html/
          ServerName bbs.linuxinfo.top
          ErrorLog logs/bbs.linuxinfo-error_log
          Customlog logs/bbs.linuxinfo-access_log common
      </VirtualHost>



14、Status页面 (服务器状态)

   http.conf 配置文件(默认是开启的)

    LoadModule status_module modules/mod_status.so

   关于status的配置(在httpd.conf文件内,默认注释)

    #<Location /server-status>

    #    SetHandler server-status

    #    Order deny,allow

    #    Deny from all

    #    Allow from .example.com

    #</Location>

    


15、curl命令

    Curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP、FTPS、HTTP、HTTPS、GORHER、TELNET、DICT、FILE、及LDAP等协议。Curl支持https认证,并且支持http的POST、PUT等方法,FTP上传、kerberos认证、HTTP认证、HTTP上传、代理服务器,cookies、用户名/和密码认证,下载文件断点续传,上载文件断点续传,http代理服务器管道(porxy tunneling),甚至它还支持ipv6,sock5代理服务器,通过http代理服务器上传文件到ftp服务器等等,功能十分强大。

    Curl [options] [URL..]

        常用参数

    curl命令参数很多,这里只列出我曾经用过、特别是在shell脚本中用到过的那些。

    -v/--verbose 小写的v参数,用于打印更多信息,包括发送的请求信息,这在调试脚本是特别有用。

    -m/--max-time <seconds> 指定处理的最大时长

    -H/--header <header> 指定请求头参数

    -s/--slient 减少输出的信息,比如进度

    --connect-timeout <seconds> 指定尝试连接的最大时长

    -x/--proxy <proxyhost[:port]> 指定代理服务器地址和端口,端口默认为1080

    -T/--upload-file <file> 指定上传文件路径

    -o/--output <file> 指定输出文件名称

    -d/--data/--data-ascii <data> 指定POST的内容

    --retry <num> 指定重试次数

    -e/--referer <URL> 指定引用地址

    -I/--head 仅返回头部信息,使用HEAD请求

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

    -0/http1.0使用http1.0版本


        Elinks 命令行纯文本浏览器

        Elinks [options] [URL..]

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

16、user/group

    指定以那个用户的身份运行httpd服务进程;

User apache

Group apache


17、使用mod_deflate模块压缩页面优化传输速度

    使用场景:

   1、 节约带阔,额外消耗CPU;同时,可能有些较老浏览器不支持。

   2、压缩适用于压缩的资源,例如文件:

    

     #设置一个输出过滤器
    SetOutputFilter DEFLATE
    #根据内容类型来执行过滤,将以下格式添加到输出过滤器上
    # Restrict compression to these MIME types
    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE application/x-javascript
    AddOutputFilterByType DEFLATE text/javascript
    AddOutputFilterByType DEFLATE text/css
    #指明压缩级别,压缩级别越高,压缩比越大,就越耗费CPU
    #Level of compression(Highest 9 – Lowest 1)
    DeflateCompressionLevel 9
    #排除以下浏览器不做压缩
    BrowserMatch "^Mozilla/2" no-gzip



18、HTTPS协议https

  Http Over SSL,TCP 443端口

  HTTPS是二进制协议

  HTTPS协议介绍

  SSL协议会话过程

    (1)、客户端发送可供选择的加密方式,并向服务器请求证书;

    (2)、服务器端发送证书以及选定的加密方式给客户端;

    (3)、客户端取得证书并进行证书验证,如果信任给其发证书的CA,则:

验证证书来源的合法性:用CA的公钥解密证书上的签名

验证证书内容合法性:完整性验证

检查证书的有效期

检查证书是否被吊销

证书中拥有者的名字,与访问目的主机要一致

    (4)、客户端生产临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换。

    (5)、服务用此密钥加密用户请求的资源,响应给客户端

   注意:SSL会话是基于IP地址所创建,所以单IP的主机上,仅可以使用一个Https虚拟主机。


配置httpd支持https

 示例,主要步骤:

  为服务器申请测试证书

  创建私有CA

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

CA签证

配置Httpd支持SSL及使用的证书

  测试基于Https访问相应的主机

               

 https实现过程
    [root@www CA]# cd /etc/pki/CA/
    [root@www CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)
    Generating RSA private key, 2048 bit long modulus
    ..........................................................................+++
    ...........................+++
    e is 65537 (0x10001)
    [root@www CA]# ll private/
    total 4
    -rw-------. 1 root root 1679 Nov 1 04:37 cakey.pem
    [root@www CA]# openssl req -new -x509 -key private/cakey.pem -out
    cacert.pem
    [root@www CA]# touch serial index.txt
    [root@www CA]# echo 01 > serial
    Httpd添加Https站点
    #在Httpd服务器端生成证书签署请求
    [root@www CA]# cd /etc/httpd/
    [root@www httpd]# mkdir ssl
    [root@www httpd]# cd ssl/
    [root@www ssl]# (umask 077;openssl genrsa -out httpd.key 1024)
    [root@www ssl]# openssl req -new -key httpd.key -out httpd.csr
    [root@www ssl]# ls
    httpd.csr httpd.key //此时可以将证书签署请求发送给CA
    #CA签署请求
    [root@www CA]# openssl ca -in /etc/httpd/ssl/httpd.csr -out
    certs/httpd.crt
    #将生成的证书发送给Httpd服务器
    [root@www CA]# ll /etc/httpd/ssl/
    -rw-r--r--. 1 root root 3866 Nov 1 04:52 httpd.crt
    Httpd添加Https站点
    #Httpd安装mod_ssl模块
    yum install mod_ssl
    httpd -M | grep ssl
    Syntax OK
    ssl_module (shared)
    #修改/etc/httpd/conf.d/ssl.conf配置文件
    DocumentRoot "/var/www/html"
    ServerName www.magedu.com
    SSLCertificateFile /etc/httpd/ssl/httpd.crt
    SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
    #重启服务,测试https是否正常访问
测试基于https访问相应的主机
#openssl s_client [-connect host:port] [-cert filename] [-C Apath directory] [-CA file fielname


    19、httpd自带的工具程序

    Httpasswd

basic认证基于文件实现时,用到的账号文件生成工具

    Apachectl

httpd自带的服务控制脚本,支持start和stop

    Apxs

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

    Rotatelogs

 日志滚动工具

    Suexec

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

    Ab压测工具

         Apache bench 压测工具,除ab外,还有webbench,http_load等命令行工具,

Jmeter, Loadrunner等图形界面工具。网易TCPCOPY,复制生产环境中真实请求,并

保存下来

    -n 总请求数

    -c 模拟的并行数

    -k 以持久连接模式测试


本文出自 “秋季” 博客,请务必保留此出处http://lxlxlx.blog.51cto.com/3363989/1885322

HTTPD服务详解