httpd服务——CentOS6

Web Service

应用层:http,https

实现某类具体应用

传输层协议:TCP,UDP,SCTP

IANA:

         0-1023:从所周知的端口,永久的分配给固定应用使用,特权端口

         1024-41951:亦为注册端口,但要求不是特别严格,分配给程序注册为某应用使用;3306/tcp,11211/tcp

         41952+:客户端程序随机使用的端口动态端口,或私私有端口;其范围定义在/proc/sys/net/ipv4/ip_local_port_range

BSD Socket:IPC的一种实现,运行不同主机(也可以是同一主机)上的进程之间进行通信

Socket API(封装了内核中的socket通信相关的系统调用)

TCP FSM:

    CLOSED,LISTEN,SYN_SENT,SYN_RECV,ESTABLISHED,FIN_WAIT1,CLOSE_WAIT,FIN_WAIT2,LAST_ACK,TIMEWAIT,CLOSED

TCP协议的特性:

         建立链接:三次握手

         将数据打包成段:校验和(CRC32)

         确认、重传及超时

         排序:逻辑序号

         流量控制:滑动窗口算法

         拥塞控制:慢启动和拥塞避免算法

http:hyper text transfer protocol,应用层协议,80/tcp

         html:hyper text mark languge,编程语言,超文本标记语言

        

         <html>

             <head>

                  <title>TITLE</title>

             </head>

             <body>

                 <h1>TEST</h1>

                 <p>blabla…<a href="http://www.gm.com/download.html">bla….</a></p>

                 <h2>TEST</h2>

             </body>

         </html>

        

         css:Cascading Style Sheet

         js:javaScript客户端脚本

协议版本:

         http/0.9:原型版本,功能简陋,只在实验室中

         http/1.0:cache,MIME,method

             MIME:Multipurpose Internet Mail Extesion

             method:GET,POST,HEAD,PUT,DELETE,TRACE,OPTIONS

         http/1.1:增强了缓存功能

             spdy

         http/2.0:

             rfc

工作模式:

         http请求报文:http request

         http响应报文:http response

             一次http事务:请求 <–> 响应

web资源:web resource

         静态资源(无须服务端做出额外处理):.jpg .png .gif .html .txt .js .css .mp3 .avi

         动态资源(服务端需要通过执行程序做出处理,发送给客户端的是程序的运行结果):.php .jsp

        

         注意:一个页面中展示的资源可能有多个,每个资源都需要单独请求

资源的标识机制:URL

         Uniform Resource Locator:用于描述服务器某特定资源的位置

              例如:http://www.sina.com.cn/index.html

                 Scheme://Server[:Port][/PATH/TO/SOME_RESOURCE]

一次完整的http请求处理过程:

         (1)建立或处理连接:接收请求或拒绝

         (2)接收请求:接收来自于网络上的主机请求报文中对某特定资源的一次请求的过程

         (3)处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息

         (4)访问资源:获取请求报文中请求的资源

         (5)构建响应报文

         (6)发送响应报文

         (7)记录日志<可以用于后期分析>

请求接收的模型:

     并发访问响应模型:

         单进程I/O结构:启动一个进程处理用户请求;一次只能处理一个请求,多个请求被串行响应

         多进程I/O结构:并行启动多个进程,每个进程响应一个请求

         复用的I/O结构:一个进程响应n个请求

                 多线程模式:一个进程生成n个线程,一个线程处理一个请求

                 事件驱动(event-driven):一个进程处理n个请求

         复用的多进程I/O结构:启动多个(m)个进程,每个进程生成(n)个线程

             响应的请求数量:m*n

处理请求:分析请求报文的http请求报文首部

         http协议:

                 http请求报文首部

                 http响应报文首部

         请求报文首部的格式:

                 <method><URL><VERSION>

                 HEADERS:(name:value)

                 <request body>

访问资源:获取请求报文中请求的资源

         web服务器,即存放了web资源的主机,负责向请求者提供对方请求的静态资源,或动态资源运行生成的结果;这些资源通常应该放置于本地文件系统某路径下,此路径称为DocumentRoot

        

        web服务器的资源路径映射方式:

                 (a)docroot

                 (b)alias

                 (c)虚拟主机的docroot

                 (d)用户家目录的docroot

        

         http请求处理中的连接模式:

                 保持连接(长连接):keep-alive

                         通过2个资源进行限制:

                         时间,数量<空间>

                 非保存连接(短连接):close

http服务器程序:

httpd(apache)

nginx

lighttpd

应用程序服务器:

         IIS:.Net

         tomcat:.jsp

httpd的安装和使用:

         ASF:apache software foundation

         httpd:apache

         a patchy server = apache

httpd的特性;

         高度模块化:core+modules

         DSO:dynamic shared object

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

                 prefork:多进程模型,每个进程响应一个请求

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

                     n个子进程:每个子进程处理一个请求

                     工作模型:会预先生成几个空闲进程,随时等待用于响应用户请求;最大空闲和最小空闲

                 worker:多线程模型:每个进程生成多个线程

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

                     n个子进程:每个子进程内部生成多个线程

                     每个线程:负责响应一个请求

                     并发响应数量:m*n

                         m;子进程数量

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

                 event:基于事件驱动模型,多进程模型,每个进程响应多个请求

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

                     n个子进程:基于事件驱动机制直接响应多个请求

        

                 httpd-2.2:仍为测试使用模型

                 httpd-2.4:event可生产环境中使用

httpd的程序版本:

         httpd 1.3:官方已经停止维护

         httpd 2.0:

         httpd 2.2:CentOS6系列上的默认http版本

         httpd 2.4:CentoS7系列上的默认http版本

httpd的功能特性:

         CGI:Common Gateway Interface

         虚拟主机:IP,PORT,FQDN

         反向代理

         负载均衡

         路径别名

         丰富的用户认证机制

                 basic

                 digest

         支持第三方模块

         ……

安装httpd:

     rpm包:CentOS发行版中直接提供

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

CentOS 6:httpd-2.2

     程序环境:

             配置文件:

                 /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.worker

                 /usr/sbin/httpd.event

             日志文件:

                 /var/log/httpd/:

                     access_log:访问日志

                     error_log:错误日志

             站点文档:

                 /var/www/html

             模块文件路径:

                 /usr/lib64/httpd/modules

             服务控制和启动:

                 chkconfig httpd on|off

                 service {start|stop|status|restart|configtest|reload} httpd

CentOS 7:httpd-2.4

     程序环境:

         配置文件:

             /etc/httpd/conf/httpd.conf

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

         模块相关的配置文件:

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

        Systemd Unit file:

             /usr/lib/systemd/system/httpd.service

         主程序文件:

             /usr/sbin/httpd

                 http-2.4支持MPM的动态切换

         日志文件:

             /var/log/httpd/:

                 access_log:访问日志

                 error_log:错误日志

         站点文档:

             /var/www/html

         模块文件路径:

             /usr/lib64/httpd/modules

        

         服务启动和控制:

             systemctl enable|disable httpd.service

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

httpd-2.2的常用配置:

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

         ### Section 1: Global Environment

         ### Section 2: 'Main' server configuration

         ### Section 3: Virtual Hosts

         注意:第2段和第3段不能同时生效

配置格式:

     directive value

         directive:不区分字符大小写

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

常用配置:

1、修改监听的IP和PORT

         Listen [IP:]PORT

        

         (1)省略IP表示监听在所有可用的IP上

         (2)Listen指令可重复出现多次,表示监听在多个socket上

             Listen 80;

             Listen 8080;

         (3)修改监听socket,需重启服务进程方可生效

2、持久连接

         Persistent Connection:tcp连接建立后,每个资源获取完成后不会断开连接,而是等待其他资源请求的进行

        

         数量限制

         时间限制

        

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

         折中:使用较短的持久连接时长,以及较小的请求数量

        

         KeepAlive On|Off

         KeepAliveTimeout 15

         MaxKeepAliveRequests 100

        

         测试:

             telnet WEB_SERVER_IP PORT

             GET /URL HTTP/1.1

             Host:WEB_SERVER_IP

3、MPM

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

     ps aux | grep httpd

    

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

     查看httpd程序的模块列表:

         查看静态编译的模块:

             # httpd -l

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

             # httpd -M

    

     更换使用http程序,以支持其他MPM机制

         /etc/sysconfig/httpd

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

        

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

     MPM配置:

         prefork的配置:

             <IfModule prefork.c>

             StartService 8

             MinSpareServers 5

             MaxSpareServers 20

             ServerLimit 256

             MaxClient 256

             MaxRequestPerChild 4000

             </IfModule>

        

         worker的配置:

             <IfModule worker>

             StartServers 4

             MaxClients 300

             MinSpareThreads 25

             MaxSpareThreads 75

             ThreadsPerChild 25

             MaxRequestPerChild 0

             </IfModule>

        

         PV ,MV

         PV:Page View

         MV:User View

4、DSO

     配置指定实现模块加载

         LoadModule <mod_name> <mod_path>

    

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

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

5、定义'Main'server的文档网页路径

     DocumentRoot ""

    

     文档路径映射:

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

             相当于站点URL的根路径

            

             eg:(FileSystem)/var/httpd/web/index.html –> (URL)/index.html

6、站点访问控制

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

    

             文件系统路径:

                     <Directory "">

                    

                     </Directory>

                    

                     <File "">

                    

                     </File>

                    

                     <FileMatch "PATTERN">

                    

                     </FileMatch>

            

             URL路径:

                     <Location "">

                    

                     </Location>

                    

                     <LocationMatch "">

                    

                     </LocationMatch>

     <Direcroty>中“基于源地址”实现访问控制

         (1)Options

                 后跟1个或多个空白字符分隔的“选项”列表

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

                     FollowSymLinks:运行跟踪符号连接文件所指向的源文件

                     None

                     All

        

         (2)AllowOverride

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

                     All

                     None

                

         (3)order和allow、deny

                 order:定义生效次序;写在后面的表示默认法则;多条命令有重复,以最后一次出现问准

                

                 Allow form

                 Deny form

                     来源地址:

                             IP

                             NetAddr

                                 172.16

                                 172.16.0.0

                                 172.16.0.0/16

                                 172.16.0.0/255.255.0.0

                                 以上4中表达式等价

7、定义站点主页面:

    DirecrotyIndex index.html index.php

8、定义路径别名

     格式:

         Alias /URL/ "/PATH/TO/SOMEDIR/"

             Alias:中前后必须匹配,前面文件名后有/后面“”中文件名后面也的有/

    

     DocumentRoot "/www/htdocs"

         http://www.gm.com/download/file

             /www/htdocs/download/file

    

     Alias /download "/test/"

         http://www.gm.com/download/file

             /test/file

    

         http://www.gm.com/images/file.png

             /www/htdocs/images/file.png

9、设定默认字符集

     AddDefaultCharset UTF-8

    

         中文字符集:GBK、GB2312、GB18030

10、日志设定

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

    

     错误日志:

         ErrorLog logs/error_log

         LogLevel warn

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

    

     访问日志:

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

         CustomLog logs/access_log combined

        

         LogFormat format strings:

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

                

                 %h:客户端IP地址

                 %i:Remote User,通常为一个减号("-")

                 %u:Remote user (from auth; may be bogus if return status (%s) is 401):非为登录访问时,其为一个减号

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

                 %r:First line of request,即表示请求报文的首行;记录了此次请求的“方法”,“URL”以及协议版本

                 %>s:响应状态码

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

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

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

11、基于用户的访问控制

     认证质询:

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

    

     认证:

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

        

         认证方式有两种:

             basic:明文

             digest:消息摘要认证

    

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

    

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

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

        

         存储:

             文本文件

             SQL数据库

             ldap目录存储

    

     basic认证配置示例:

         (1)定义安全域

             <Directory "">

                 Options None

                 AllowOverride None

                 AuthType Basic

                 AuthName "String"

                 AuthUserFile "/PAHT/TO/HTTPD_USER_PASSWD_FILE"

                 Require user username1 username2

             </Directory>

        

             允许帐号文件中的所有用户登录访问:

                 Require valid-user

        

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

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

                 htpasswd [options] /PATH/TO/HTTPD_PASSWD_FILE username

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

                     -m:md5格式加密

                     -s:sha格式加密

                     -D:删除指定用户

                    -b:可以指定用户密码,不用交互式

        

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

         (1)定义安全域

             <Directory "">

                 Options None

                 AllowOverride None

                 AuthType Basic

                 AuthName "String"

                 AuthUserFile "/PAHT/TO/HTTPD_USER_PASSWD_FILE"

                 AuthGroupFile "/PAHT/TO/HTTPD_GROUP_FILE"

                 Require group grpname1 grpname2

             </Directory>

        

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

        

             组文件:每一行定义一个组

             GRP_NAME:username1 username2 …

12、虚拟主机

     站点标识:socket

         IP相同,但端口不同

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

         FQDN不同:

             请求报文中首部

             Host:www.gm.com

    

     有三种实现方案:

             基于IP:

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

             基于port:

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

             基于FQDN:

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

    

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

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

虚拟主机的配置方法:

     <VirtualHost IP:FQDN>

         ServerName FQDN

         DocumentRoot ""

     </VirtualHost>

    

     其他可用指令:

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

         ErrorLog:

         Customlog:

         <Directory "">

        

         </Direcroty>

         Alias

        

基于IP的虚拟主机示例:

         <VirtualHost 10.1.43.3:80>

             ServerName www.a.com

             DocumentRoot "/www/a.com/htdocs"

         </VirtualHost>

        

         <VirtualHost 10.1.43.4:80>

             ServerName www.b.com

             DocumentRoot "/www/b.com/htdocs"

         </VirtualHost>

        

         <VirtualHost 10.1.43.5:80>

             ServerName www.c.com

             DocumentRoot "/www/c.com/htdocs"

         </VirtualHost>

基于端口的虚拟主机示例:

         <VirtualHost 10.1.43.3:80>

             ServerName www.a.com

             DocumentRoot "/www/a.com/htdocs"

         </VirtualHost>

        

         <VirtualHost 10.1.43.3:808>

             ServerName www.b.com

             DocumentRoot "/www/b.com/htdocs"

         </VirtualHost>

        

         <VirtualHost 10.1.43.3:8080>

             ServerName www.c.com

             DocumentRoot "/www/c.com/htdocs"

         </VirtualHost>

基于FQDN的虚拟主机示例:

         NameVirtualHost 10.1.43.3

        

         <VirtualHost 10.1.43.3:80>

             ServerName www.a.com

             DocumentRoot "/www/a.com/htdocs"

         </VirtualHost>

        

         <VirtualHost 10.1.43.3:80>

             ServerName www.b.com

             DocumentRoot "/www/b.com/htdocs"

         </VirtualHost>

        

         <VirtualHost 10.1.43.3:80>

             ServerName www.c.com

             DocumentRoot "/www/c.com/htdocs"

         </VirtualHost>

13、status页面

     LoadModule status_module modules/mod_status.so

    

     <Location /server-status>

         SetHandler server-status

         Order allow,deny

         allow from 10.1.43

     </Location>

14、curl命令

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

MIME:major/minor,image/png,image/gif

curl  [options]  [URL…]

curl的常用选项:

   -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.0 使用HTTP 1.0

用法:curl [options] [URL…]

另一个工具:elinks

    elinks  [OPTION]… [URL]…

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

15、user/group

     指定以哪个用户的身份运行http服务进程

         User apache

         Group apache

    

     SUexec

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

适用场景:

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

         (2) 压缩适于压缩的资源,例如文件文件;

SetOutputFilter 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.

BrowserMatch ^Mozilla/4  gzip-only-text/html

# Netscape 4.06-4.08 have some more problems

BrowserMatch  ^Mozilla/4\.0[678]  no-gzip

# MSIE masquerades as Netscape, but it is fine

BrowserMatch \bMSI[E]  !no-gzip !gzip-only-text/html

17、https,  http over ssl

SSL会话的简化过程

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

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

     (3) 客户端取得证书并进行证书验正:

         如果信任给其发证书的CA:

             (a) 验正证书来源的合法性;用CA的公钥解密证书上数字签名;

             (b) 验正证书的内容的合法性:完整性验正

             (c) 检查证书的有效期限;

             (d) 检查证书是否被吊销;

             (e) 证书中拥有者的名字,与访问的目标主机要一致;

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

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

    

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

回顾几个术语:PKI,CA,CRL,X.509 (v1, v2, v3)

配置httpd支持https:

     (1) 为服务器申请数字证书;

         测试:通过私建CA发证书

             (a) 创建私有CA

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

             (c) CA签证

    

     (2) 配置httpd支持使用ssl,及使用的证书;

         # yum -y install mod_ssl

        

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

             DocumentRoot

             ServerName

             SSLCertificateFile

             SSLCertificateKeyFile

    

     (3) 测试基于https访问相应的主机;

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

18、httpd自带的应用程序

htpasswd:basic认证基于文件实现,用于生成账号和密码的程序;

     htdbm

     htdigest

apachectl:httpd自带的服务控制脚本,支持start和stop等子命令;

apxs:- APache eXtenSion tool

rotatelogs:日志滚动工具

     access.log –>

         access.log ,access.1.log –>

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

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

ab:apache benchmark  web服务器的压力测试工具

     webbench, httpload, …

    

     loadrunner, jmeter (ASF)

    

     tcpcopy:网易,复制生产环境中的真实请求,并将之保存下来

19、ab – web service的压力测试工具

     命令行工具:ab, webbench, httpload, seige, …

     GUI:loadrunner, jmeter

     tcpcopy

     ab [options]  [http[s]://]hostname[:port]/path

         请求数:-n requests

         并发数:-c concurrency

         长连接模式测试:-k

    

原创文章,作者:megedugao,如若转载,请注明出处:http://www.178linux.com/50426