HTTP协议和APACHE服务器

Web Service

传输层:提供进程地址

Portnumber:

tcp:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路;

0-65535

udp:User DatagramProtocol,无连接的协议;

0-65535

IANA:

0-1023:众所周知,永久的分配给固定的应用使用,特权端口,22/tcp(ssh), 80/tcp(http), 443/tcp(https)

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

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

Socket: IPC的一种实现,允许位于不同主机(甚至同一主机)上不同进程之间进行通信;数据交换;Socket API, 1983年,4.2 BSD

SOCK_STREAM:tcp套接字

SOCK_DGRAM:udp套接字

SOCK_RAW: 裸套接字

IPv4:

分类:

A:1-127

B:128-191

C:192-223

D:组播,224-239

E:240-254

私有地址:

A:10.0.0.0/8

B:172.16.0.0/16-172.31.0.0/16

C:192.168.0.0/24-192.168.255.0/24

TCP协议的特性:

建立连接:三次握手

将数据打包成段:校验和(CRC-32)

确认、重传以及超时:

排序:逻辑序号

流量控制:滑动窗口算法

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

Socket Domain(根据其所使用的地址):

AF_INET:AddressFamily,IPv4

AF_INET6:IPv6

AF_UNIX:同一主机上不同进程之间通信时使用;

每类套接字都至少提供了两种socket:流,数据报

流:可靠地传递、面向连接、无边界;

数据报:不可靠地传递、有边界、无连接;

套接字相关的系统调用:

socket(): 创建一个套接字;

bind():绑定

listen():监听

accept():接收请求

connect():请求连接建立

write():发送

read():接收

send(),recv(), sendto(), recvfrom()

MIME:Multipurpose Internet Mail Extesion

工作机制:

http请求

http响应

Web资源:web resource

静态文件:.jpg, .gif, .html, .txt, .js, .css, .mp3, .avi

动态文件:.php, .jsp,

媒体:

媒体类型(MIME类型):major/minor

text/html

text/plain

image/jpeg

image/gif

URI:Uniform Resource Identifier

URL: Uniform Resorce Locator,用于描述某服务器某特定资源的位置;

Scheme://Server:Port/path/to/resource

URN:Uniform Resource Naming

http协议版本:

HTTP/0.9:原型版本,功能简陋

HTTP/1.0:第一个广泛使用的版本,支持MIME

HTTP/1.1: 增强了缓存功能

spdy

HTTP/2.0:

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

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

(2) 接收请求:

接收来自于网络的请求报文中对某资源的一次请求的过程;

并发访问响应模型(Web I/O):

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

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

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

多线程模型:一个进程生成N个线程,每个线程响应一个用户请求;

事件驱动机制:event-driven 一个进程可以与多个进程通信

复用的多进程I/O结构:启动多个(m)进程,每个进程响应n个请求;即并行响应

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

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

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

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

(a)docroot

(b)alias

(c) 虚拟主机docroot

(d) 用户家目录docroot

(5) 构建响应报文

资源的MIME类型:

显式分类

魔法分类

协商分类

URL重定向:

web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径;

(6) 发送响应报文

(7) 记录日志

http服务器程序:

httpd (apache)、nginx 、lighttpd

应用程序服务器:

IIS

tomcat,jetty, jboss, resin

webshpere,weblogic, oc4j

http协议:

http协议版本:

http/0.9,http/1.0, http/1.1, http/2.0

协议查看或分析的工具:

tcpdump,tshark, wireshark

报文语法格式:

request请求报文[Client发给Server]

<method><request-URL> <version>

<headers>

<entity-body>

response响应报文[Server发给Client]

<version><status> <reason-phrase>

<headers>

<entity-body>

method: 请求方法,标明客户端希望服务器对资源执行的动作

method(方法):


GET


从服务器获取一个资源;


HEAD


只从服务器获取文档的响应首部;


POST


向服务器发送要处理的数据;


PUT


将请求的主体部分存储在服务器上;


DELETE


请求删除服务器上指定的文档;


TRACE


追踪请求到达服务器中间经过的代理服务器;


OPTIONS


请求服务器返回对指定资源支持使用的请求方法;

version:

HTTP/版本号

status:

三位数字,如200,301, 302, 404, 502; 标记请求处理过程中发生的情况;

status(状态码):

1xx:100-101, 信息提示;

2xx:200-206, 成功

3xx:300-305, 重定向

4xx:400-415, 错误类信息,客户端错误

5xx:500-505, 错误类信息,服务器端错误

常用的状态码:


200


成功,请求的所有数据通过响应报文的entity-body部分发送;OK


301


请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置;Moved Permanently


302


与301相似,但在响应报文中通过Location指明资源现在所处临时新位置;  Found


304


客户端发出了条件式请求询问[Server本地缓存和Server内容是否不一致],但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;Not Modified


401


需要输入账号和密码认证方能访问资源;Unauthorized


403


请求被禁止;Forbidden


404


服务器无法找到客户端请求的资源;Not Found


500


服务器内部错误;Internal Server  Error


502


代理服务器从后端服务器[即代理服务器,保存真正Server的缓存,若无缓存则去找上级服务器…]收到了一条伪响应;Bad Gateway

reason-phrase:

对状态码的简要描述;

headers:

每个请求或响应报文可包含任意个首部;每个首部都有首部名称,后面跟一个冒号,而后跟上一个可选空格,接着是一个值;

headers格式:

例:


GET /test/hello.html   HTTP/1.1


发送GET请求,请求资源/test/hello.html  协议版本HTTP/1.1


Accept: */*


客户端可以接收任何数据


Rerferer: http://localhost:80/test/abc.html


请求来自哪里,即从哪个页面跳转过来的


Accept-Language:   zh-cn


页面支持什么语言


User-Agent: Moziala/4.0


告诉服务器客户端的浏览器内核/版本


Accept-Encoding: gzip,defate


表示接收什么样的数据压缩格式


Host: localhost:80


主机


Connection: Keep-Alive


表示长连接,即不立即断开

首部的分类:

通用首部、请求首部、响应首部、实体首部、扩展首部

通用首部:[请求和响应都可以使用]

Date: 报文的创建时间

Connection:连接状态,如keep-alive,close

Via:显示报文经过的中间节点,即经过几个代理

Cache-Control:控制缓存的生效方法 [ 例:cache-control: max-age=100 缓存在100s后失效 ]

请求首部:[专用于请求]

Accept:通过服务器自己可接受的媒体类型;

Accept-Charset:  接受的字符编码格式 UTF-8

Accept-Encoding:接受的压缩编码格式,如gzip

Accept-Language:接受的语言格式 zh-cn

Client-IP: 客户端IP

Host: 请求的服务器名称和端口号

Referer:包含当前正在请求的资源的上一级资源[ 即从哪个页面跳转过来的 ]

User-Agent:客户端代理[ 客户端浏览器的内核/版本 ]

条件式请求首部:

Expect:用于指出客户端要求的特殊服务器行为。

If-Modified-Since:自从指定的时间之后,请求的资源是否发生过修改;

If-Unmodified-Since:自从指定的时间之后,请求的资源是否没发生过修改;

If-None-Match:本地缓存中存储的文档的ETag标签是否与服务器文档的Etag不匹配;

If-Match:本地缓存中存储的文档的ETag标签是否与服务器文档的Etag匹配;

安全请求首部:

Authorization:向服务器发送认证信息,如账号和密码;

Cookie: 客户端向服务器发送cookie

代理请求首部:

Proxy-Authorization: 向代理服务器认证

响应首部:[专用于响应]

信息性:

Age:响应持续时长

Server:服务器程序软件名称和版本

协商首部:某资源有多种表示方法时使用

Accept-Ranges:服务器可接受的请求范围类型

Vary:服务器查看的其它首部列表;

安全响应首部:

Set-Cookie:向客户端设置cookie;

WWW-Authenticate:来自服务器的对客户端的质询认证表单

实体首部:[专用于描述entity-body即附加数据]

Allow: 列出对此实体可使用的请求方法[GET POST…]

Location:告诉客户端真正的实体位于何处[重定向时使用]

Content-Encoding:内容压缩编码格式

Content-Language:内容语言

Content-Length: 主体的长度

Content-Location: 实体真正所处位置;

Content-Type:主体的对象类型[text/html …]

缓存相关:

ETag:实体的扩展标签;

Expires:实体的过期时间;

Last-Modified:最后一次修改的时间

entity-body:实体主体;请求时附加的数据或响应时附加的数据;

httpd程序环境:

rpm包安装的httpd的默认工作目录(根目录):/etc/httpd

配置文件:

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

分段配置文件:/etc/httpd/conf.d/*.conf

服务脚本:

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

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

模块文件目录:

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

主程序文件:

/usr/sbin/httpd (prefork)

/usr/sbin/httpd.worker (worker)

/usr/sbin/httpd.event (event)

日志文件目录:

/var/log/httpd

access_log: 访问日志文件

error_log:错误日志[ httpd服务启动和关闭的信息也在这里 ]

站点文档目录:

/var/www/html

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

由三部分组成

### Section 1:Global Environment [全局有效配置]

### Section 2: ‘Main‘ serverconfiguration [Main server有效配置]

### Section 3: Virtual Hosts [虚拟主机有效配置]

‘Main‘server和Virtual Hosts不能同时启用;默认启用的是‘Main‘server [即全局的DocumentRoot 指令];

1、指定监听地址和端口

Listen [IP:]80

(1) IP省略时表示监听本机上所有可用的IP地址;

(2) Listen指令可以出现多次,用于指明多个不同的监听端口或套接字:

Listen172.16.100.11:80

Listen172.16.100.11:8080

2、持久连接相关

KeepAlive Off|On

MaxKeepAliveRequests 100

KeepAliveTimeout 15

持久连接:一次TCP三次握手连接建立后,每个资源获取结束不会立即四次断开连接,而继续等待其它资源请求并完成传输;

断开要求:

数量限制:如100个

时间限制:如15秒

劣势:对并发访问量较大的服务器,开持久连接会有些请求得不到服务;

改进:减短时间,httpd-2.4支持毫秒级

非持久连接:每个资源都是单独通过专用的连接进行获取

测试:

#telnet Server 80

GET/URL HTTP/1.1

Host:Server

3、MPM

多路处理模块:并发请求响应的不同实现

prefork,worker, event

MPM:MultipathProcessing Modules   多路处理模块机制

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

启动一个主进程,用来监听套接字和负责生成子进程 [ 子进程也称为工作进程 ],每个子进程处理一个用户请求;即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不会超过1024个;

即一个请求到来时,主进程不会响应这个请求,而是让一个预先生成的子进程去处理,主进程再去监听套接字;

worker:多线程模型,每个线程响应一个请求;

启动一个主进程用来生成多个子进程,每个子进程负责生个多个线程,每个线程响应一个请求;

例:若有m子进程,n个线程,可以同时处理m*n请求

即一个请求到来时,主进程不会响应这个请求,而是让一个预先创建的空闲子进程去找一个预先生成的线程去处理;且预先生成的空闲进程和线程数量是有上下限的

event:事件驱动模型,每个线程响应多个请求;

一个主进程:生成多个子进程,每个子进程直接响应多个请求;

httpd-2.2: event为测试使用

httpd-2.4: event可生产使用

httpd-2.2 不支持同时编译多个不同的MPM,rpm安装的httpd-2.2提供了三个文件分别用于实现提供对不同的MPM的支持;确认方法:

# ps aux | grep httpd

默认为/usr/sbin/httpd,其为prefork;

查看模块列表:

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

httpd -M: 查看所有模块,包括静态编译和DSO模块[动态装卸载模块]

httpd-worker -M|-l

httpd-event -M|-l

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

编辑/etc/sysconfig/httpd

启用变量:HTTPD [取消注释即可]

修改其配置属性在/etc/httpd/conf/http.conf

注意:MaxRequsetPerChild不是越大越好,而是根据实际情况,内存较大的服务器设大些,内存较小设小些;即设定一个独立的子进程能处理的请求数,到达这个数量时,子进程会被父进程终止,这时就会释放占用的内存。所以越大时占用内存越大。

# worker MPM

#StartServers: initial number of server processes to start

#MaxClients: maximum number of simultaneous client connections

#MinSpareThreads: minimum number of worker threads which are kept spare

#MaxSpareThreads: maximum number of worker threads which are kept spare

#ThreadsPerChild: constant number of worker threads in each server process

#MaxRequestsPerChild: maximum number of requests a server process serves

<IfModule worker.c>

StartServers         4 [服务器启动时启动多少子进程]

MaxClients         300 [最多允许多少个并发连接,不超过1024]

MinSpareThreads     25 [最少总空闲线程]

MaxSpareThreads     75 [最多总空闲线程]

ThreadsPerChild     25 [每一个子进程可以生成多少个线程]

MaxRequestsPerChild  0 [不限制]

</IfModule>

4、配置指令模块加载:

LoadModule<module_name> <module_path>

模块路径:可使用相对路径;相对于ServerRoot[/etc/httpd]指令指向的位置而言;

注意:建议使用service httpd reload重新装载配置文件

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

DocumentRoot指令   指定网站页面位置[路径要事先存在]

6、站点路径访问控制

访问控制机制:

基于来源地址

基于账号

定义的方式有两种:

文件系统路径:

<Directory"/PATH/TO/SOMEDIR">

...

</Directory>

URL路径:

<Location"/URL">

...

</Location>

7、Directory中的访问控制定义

(1) Options

Indexes: 当访问的路径下无默认主页面文件存在,且没有指定具体要访问的资源时,会将此路径下的所有资源以列表呈现给用户;非常危险,不建议使用;

FollowSymLinks:如果某页面文件为链接文件,指向DocumentRoot之外路径上的其它文件时,将直接显示目标文件的内容;

None: 都不启用

All:所有的都启用;

(2) AllowOverride None

是否允许路径下的.htaccess文件覆盖定义的访问控制权限

(3) 基于来源地址访问控制

Order: 检查次序

Order Allow Deny:以Allow优先处理,但没有写入规则的则默认为Deny。常用于:开放所有,拒绝特定

Order Deny Allow:   以Deny优先处理,但没有写入规则的则默认为Allow。常用于:拒绝所有,开放特定

注意:当Allow和Deny的规则当中有重复的,则以Order先后顺序为主。

Allow from:允许访问的来源地址

Deny from:拒绝访问的来源地址

from后可跟上的地址格式:

IP地址;

网络地址:

172.16

172.16.0.0

172.16.0.0/16

172.16.0.0/255.255.0.0

例:

<Directory  /var/www>

Options None

AllowOverride None

Order Allow Deny

Allow from all

Deny from 192.168.1.110

</Directory>

8、定义默认的主页面

DirectoryIndex index.htmlindex.html.var

自左而右,找到首次匹配到的文件;就将其做为默认主页面返回。

9、配置日志

错误日志:

访问日志:要定义日志格式

先定义日志格式

日志内容


%h


记录客户端主机的IP地址


%l


客户用户通过identd登录时使用名称;一般为- [ - 为空 ];


%u


用户认证登录的名字[基于.htpasswd的密码认证才有];无登录机制一般为-;


%t


收到客户端请求时的时间;


\"


显示引号本身,而不作为引用符号;\为转意符


%r


请求报文的首行     <method> <url> <version>


%>s


响应状态状态码


%b


响应报文的大小,单位为字节;不包含首部信息;


%{Referer}i


记录Http首部Referer对应的值,即访问入口,从哪个页面跳转至此页面;[直接从浏览器进入为空]


%{User-Agent}i


记录http首部User-Agent对应的值;即浏览器内核类型;

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

10、路径别名

Alias/URL/ "/path/to/some_directory"

例如:Alias /bbs/ "/web/bbs/htdocs/"

DocumentRoot"/var/www/html"

注意:路径最后一个斜线都要有或者都没有

URL: http://www.lx.com/bbs/index.html --> 找的是/web/bbs/htdocs/index.html而不是/var/www/html下的文件

11、设定默认字符集

AddDefaultCharset UTF-8

常用字符集:GBK, GB2312, GB18030

12、基于用户的访问控制

质询:

响应报文首部:WWW-Authenticate[ 服务器用401状态拒绝客户端请求,说明需要用户提供用户名和密码;弹出对话框 ]

认证:

请求报文首部:Authorization[ 客户端用户填入账号密码后再次发请求至服务器;认证通过,则请求授权 ]

安全域:需要用户认证后方能访问的路径,应该有其名称,用于向用户通知此认证的原因等;

http协议支持的认证方式:

basic:基本   BASE64 [ 只是编码不是加密 ]

digest:摘要 [老的浏览器不支持]

basic认证机制的实现

(1) 定义安全域

<Directory"/data/web/html/employee">

Options None

AllowOverride None

AuthType Basic

AuthName "Employee Infomation, only for employee"   [ "注释显示信息" ]

AuthUserFile /etc/httpd/users/.passwd                               [ htpasswd生成的基于Basic的密钥文件 ]

Require user tom jerry                                                            [ 允许AuthUserFile文件中的那些用户登录 ]

</Directory>

Require valid-user: 所有位于AuthUserFile文件中定义的用户都允许登录;

Require user user1 user2 ...: 仅允许user1,user2等出现AuthUserFile文件中定义的特定几个用户登录;

(2) 提供用户的账号文件

htpasswd命令用于维护此文件

htpasswd [ -c ] [ -m ] [ -D ] passwdfileusername

-c:添加第一用户时创建此文件;若文件存在,则覆盖文件

-m:以md5格式加密用户密码存放;

-s:以sha格式加密用户密码存放;

-D:删除指定用户

例:htpasswd -c .passwd lx

当添加第二个用户时,不用-c 即 htpasswd .passwd abc

(3) 组认证

<Directory"/data/web/html/employee">

Options None

AllowOverride None

AuthType Basic

AuthName "Employee Infomation, onlyfor employee"

AuthUserFile /etc/httpd/users/.htpasswd

AuthGroupFile /etc/httpd/users/.htgroup

Require group GRP1 GRP2 ...

</Directory>

组文件:

每行定义一个组,格式

Grp_Name: USERNAME1 USERNAME2 ...

测试:组认证过程:

1.编辑/etc/httpd/conf/httpd.conf

2.mkdir -p /web/vhosts/test  /web/vhosts/test/protect

3.创建测试database页面 vim /web/vhosts/test/protect/database  ; <h1>database test<h1>

4.用htpasswd命令创建密码文件   htpasswd -c/web/vhosts/test/protect/.passwd lx ;

htpasswd /web/vhosts/test/protect/.passwd tom;           htpasswd/web/vhosts/test/protect/.passwd jeery

5.创建组文件 vim/web/vhosts/test/protect/.group

注意:虚拟用户一定要有密码才能登录,即必须用htpasswd命令创建进入AuthUserFile中

13、虚拟主机

一个物理器可以服务于多个站点,每个站点可通过一个或多个虚拟主机来实现;

httpd三种类型的虚拟主机:

基于IP

基于Port[端口]

基于FQDN[域名] 需有DNS解析

注意:得首先关闭‘Main‘server ;即注释全局的DocumentRoot指令即可;

定义虚拟主机的方法:

<VirtualHost"IP:PORT">

ServerName 主机名[www.lx.com]

DocumentRoot网站页面放置主目录[/var/www/html]

注意:额外经常用于每个虚拟主机的配置有

ErrorLog错误日志记录文件位置,不存在会自动生成 [/var/log/httpd/lx.err]

CustomLog  访问日志文件位置,不存在会自动生成 [/var/log/httpd/lx.access]  日志格式[ common|combined|agent|referer]

ServerAlias  定义路径别名

<Directory></Directory>

<Location></Location>

</VirtualHost>

注意:大多数可用于全局或‘main‘ server中的指令,都可以定义有VirtualHost中;

示例1:基于IP

<VirtualHost172.16.100.11:80>

ServerName www.a.com

DocumentRoot /vhost/a.com/htdocs/

</VirtualHost>

<VirtualHost172.16.100.21:80>

ServerName www.b.org

DocumentRoot /vhost/b.org/htdocs/

</VirtualHost>

<VirtualHost172.16.100.31:80>

ServerName www.c.net

DocumentRoot /vhost/c.net/htdocs/

</VirtualHost>

注意:本机要配置上所有IP地址并能够用于通信;

示例2:基于Port

<VirtualHost172.16.100.11:80>

ServerName www.a.com

DocumentRoot /vhost/a.com/htdocs/

</VirtualHost>

<VirtualHost172.16.100.11:808>

ServerName www.b.org

DocumentRoot /vhost/b.org/htdocs/

</VirtualHost>

<VirtualHost172.16.100.11:8080>

ServerName www.c.net

DocumentRoot /vhost/c.net/htdocs/

</VirtualHost>

注意:httpd要监听这里指明的所有端口

Listen

示例3:混用IP和Port

<VirtualHost172.16.100.11:80>

ServerName www.a.com

DocumentRoot /vhost/a.com/htdocs/

</VirtualHost>

<VirtualHost172.16.100.21:80>

ServerName www.b.org

DocumentRoot /vhost/b.org/htdocs/

</VirtualHost>

<VirtualHost172.16.100.11:8080>

ServerName www.c.net

DocumentRoot /vhost/c.net/htdocs/

</VirtualHost>

示例4:基于FQDN

注释全局的DocumentRoot指令

NameVirtualHost 172.16.100.11:80

<VirtualHost172.16.100.11:80>

ServerName www.a.com

DocumentRoot /vhost/a.com/htdocs/

</VirtualHost>

<VirtualHost172.16.100.11:80>

ServerName www.b.org

DocumentRoot /vhost/b.org/htdocs/

</VirtualHost>

<VirtualHost172.16.100.11:80>

ServerName www.c.net

DocumentRoot /vhost/c.net/htdocs/

</VirtualHost>

14、内置的status页面

<Location/server-status>

SetHandler server-status

Order deny,allow

Deny from all

Allow from 172.16.0.0/16

</Location>

可以嵌套使用,Location相当于Directory

例:通过www1.stuX.com/server-status输出httpd工作状态相关信息,且只允许帐号lx通过密码才能访问,接可以查看www1.stuX.com的index.html;

15 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服务器等等,功能十分强大。

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

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

例:  1.伪装成chrome浏览器

curl -A "chrome 4.0" http://192.168.1.110

另一个工具:elinks   全屏浏览器

elinks[OPTION]... [URL]...

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

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

适用场景:

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

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

添加进/etc/httpd/conf/httpd.conf即可对压缩格式做限定

SetOutputFilter DEFLATE  输出过滤器

#mod_deflate configuration

# Restrict compression to these MIMEtypes    限制压缩这些MIME类型

AddOutputFilterByTypeDEFLATE text/plain

AddOutputFilterByTypeDEFLATE text/html

AddOutputFilterByTypeDEFLATE application/xhtml+xml

AddOutputFilterByTypeDEFLATE text/xml

AddOutputFilterByTypeDEFLATE application/xml

AddOutputFilterByTypeDEFLATE application/x-javascript

AddOutputFilterByTypeDEFLATE text/javascript

AddOutputFilterByTypeDEFLATE text/css

# Level of compression (Highest 9 -Lowest 1)    压缩级别

DeflateCompressionLevel9

# 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 = https 443/tcp  不再是文本格式传输而是二进制格式传输

ssl: v3   tls: v1

SSL会话的简化过程

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

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

(3) 证书验正:

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

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

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

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

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

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

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

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

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

配置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]

例 openssl s_client -connect 192.168.1.115 -Cafile/etc/pki/CA/cacert.pem

基于windows的方法:把CA中自签证书重命名为cacert.crt导入到授信任的根证书即可

18、httpd自带的工具程序

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

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

例apachectl start

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

rotatelogs:日志滚动工具;

access.log-->

access.log, access.1.log-->

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

suexec:访问某些有特殊权限配置的资源时,临时切换至指定用户运行;可以在配置文件中修改User和Group即用谁的身份运行httpd

19、http压力测试工具

ab、webbench、http_load

jmeter、loadrunner

tcpcopy

ab[OPTIONS] URL

-n: 总的请求数

-c:模拟的并发数[不能超过1024,超过时用ulimit命令设置]

-k: 以持久连接模式测试

例 ab -n 1000 -c 100 -k http://www.lx.com  [ulimit -n #: 调整当前用户所同时打开的文件数;]

测试结果也一目了然,测试出的吞吐率为:Requests per second: 2015.93 [#/sec](mean)  初次之外还有其他一些信息。

Server Software 表示被测试的Web服务器软件名称

Server Hostname 表示请求的URL主机名

Server Port 表示被测试的Web服务器软件的监听端口

Document Path 表示请求的URL中的根绝对路径,通过该文件的后缀名,我们一般可以了解该请求的类型

Document Length 表示HTTP响应数据的正文长度

Concurrency Level 表示并发用户数,这是我们设置的参数之一

Time taken for tests 表示所有这些请求被处理完成所花费的总时间

Complete requests 表示总请求数量,这是我们设置的参数之一

Failed requests 表示失败的请求数量,这里的失败是指请求在连接服务器、发送数据等环节发生异常,以及无响应后超时的情况。如果接收到的HTTP响应数据的头信息中含有2XX以外的状态码,则会在测试结果中显示另一个名为      “Non-2xx responses”的统计项,用于统计这部分请求数,这些请求并不算在失败的请求中。

Total transferred 表示所有请求的响应数据长度总和,包括每个HTTP响应数据的头信息和正文数据的长度。注意这里不包括HTTP请求数据的长度,仅仅为web服务器流向用户PC的应用层数据总长度。

HTML transferred 表示所有请求的响应数据中正文数据的总和,也就是减去了Total transferred中HTTP响应数据中的头信息的长度。

Requests per second 吞吐率,计算公式:Complete requests / Time taken for tests

Time per request 用户平均请求等待时间,计算公式:Time token for tests/(Complete requests/Concurrency Level)

Time per requet(across all concurrentrequest) 服务器平均请求等待时间,计算公式:Time taken for tests/Complete requests,正好是吞吐率的倒数。也可以这么统计:Time per request/Concurrency Level

Transfer rate 表示这些请求在单位时间内从服务器获取的数据长度,计算公式:Total trnasferred/ Time taken for tests,这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量。

Percentage of requests served within acertain time(ms)这部分数据用于描述每个请求处理时间的分布情况,比如以上测试,80%的请求处理时间都不超过6ms,这个处理时间是指前面的Time per request,即对于单个用户而言,平均每个请求的处理时间。

编译安装httpd-2.4

新特性:

(1) MPM支持运行DOS[动态模块装载]机制;

(2) 支持eventMPM;

(3) 支持异步读写;

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

(5) 每请求配置;<If>

(6) 增强版的表达式分析器;

(7) 支持毫秒级的keepalivetimeout;

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

(9) 支持用户自定义变量;

新模块:

(1)mod_proxy_fcgi

(2)mod_ratelimit

(3)mod_remoteip

修改了一些配置机制:

不再支持使用Order, Deny, Allow来做基于IP的访问控制;

httpd依赖于apr,apr-util, 可能还有apr-icon

apr:apache portable runtime

编译安装步骤:

前提:

下载1.4+版的apr、apr-util、httpd-2.4的源码包

安装开发环境,安装pcre-devel、zib-devel

例:以apr-1.5.0.tar.bz2,apr-util-1.5.3.tar.bz2,httpd-2.4.10.tar.bz2为例  [ 注意:源码编译有先后顺序 apr->apr-util->httpd-2.4 ]

yum groupinstall "Development tools" "Server PlatformDevelopment"

yum install pcre-devel zib-devel

(1)apr

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

#make && make install

(2)apr-util

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

#make && make install

(3)httpd-2.4

#groupadd -r apache

#useradd -r -g apache apahce

# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --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

注意:-with-包名[例pcre-devel]=路径

都要先装它的devel包,用rpm包装的devel包不用指路径,因为默认就是找/usr/下的;而不在这个路径下的要指明


-enable-so


支持DSO动态装卸载模块机制


-enable-cgi


支持CGI[通用网关接口]模式


-enable-ssl


支持ssl


-enable-rewrite


支持url重写,依赖pcre-devel包


-with-zilb


可以基于zlib可以压缩报文


-with-pcre


支持使用pcre功能


-with-apr=/usr/local/apr


支持apr功能


-with-apr-util=/usr/local/apr-util


支持apr-util贡呢


--enable-modules=most


开启最多的模块


--enable-mpms-share=all


把所有的mpm都做成共享模块


--with-mpm=prefork


把prefork设为默认的mpm

#make && make install

先将/usr/local/apache/bin设为开机启动的环境变量

启动服务:

apachectl start|stop

配置:

注意:主配置文件在/etc/http/httpd.conf 辅助配置文件在/etc/httpd/extra/下

(1) 切换使用MPM

LoadModulempm_NAME_module modules/mod_mpm_NAME.so

NAME:prefork, event, worker

用httpd -M查看模块是否启用

(2) 修改‘Main‘server的DocumentRoot

①修改DocumentRoot   ②显示授权编写Directory

(3) 基于IP的访问控制法则

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

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

控制特定IP访问:

Require ip IPADDR:授权指定来源地址的主机访问

Require not ip IPADDR:拒绝指定来源地址的主机访问

IPADDR:

IP:172.16.100.2

Network/mask:172.16.0.0/255.255.0.0

Network/Length:172.16.0.0/16

Net:172.16

例:Require ip 192.168.1.110

控制特定主机(HOSTNAME)访问

Requirehost HOSTNAME

Requirenot host HOSTNAME

HOSTNAME:

FQDN: 特定主机

DOMAIN:指定域内的所有主机

例:Require host www.baidu.com

(4) 虚拟主机

基于IP、Port和FQDN都支持;

基于FQDN的需要注释‘Main‘ Server即DocumentRoot,不再需要NameVirtualHost指令;

vim /etc/httpd/httpd.conf  开启这一项

(5) ssl

启用模块:取消注释

编辑配置vim /etc/httpd/extra/httpd-ssl.conf

(6) 服务脚本

①先复制一个之前用rpm包安装的/etc/rc.d/init.d/httpd文件

例 scp [email protected]:/etc/rc.d/init.d/httpd/etc/rc.d/init.d/httpd

②vim /etc/rc.d/init.d/httpd 修改这三项

③用chkconfig命令增加httpd服务;在chkconfig工具服务列表中增加此服务,此时服务会被在/etc/rc.d/rc#.d中赋予K/S入口了

④测试使用service httpd start

时间: 2024-10-25 22:52:20

HTTP协议和APACHE服务器的相关文章

JAVA-WEB-Http协议和Tomcat服务器

Http协议和Tomcat服务器 Http协议 1.什么是Http协议 HTTP,超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的 一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为  了提供一种发布和接收HTML页面的方法 2.Http协议的组成 Http协议由Http请求和Http响应组成,当在浏览器中输入网址访问某个网站时, 你的浏览器会将你的请求封装成一个Http请求发送给服务器站点,服务器接收到请     求后会

Http协议和Tomcat服务器、Tomcat的下载与安装

1.Http协议和Tomcat服务器(1)Http协议 Http请求和Http响应:有请求就有响应,有响应就有请求,这两个是一体的:(2)Http请求: Http请求行:请求方式:请求的资源:协议版本: Http请求体:post和get有区别: Http请求头:(3)Http响应: Http响应行:状态码:200.302.304.404.500:状态信息:OK.Not Found: Http响应体: Http响应头: 2.Tomcat的下载与安装(1)下载网址:http://tomcat.apa

JavaWeb的学习--Http协议和Tomcat服务器

一.Http协议 1.什么是Http协议 HTTP,超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的    一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为  了提供一种发布和接收HTML页面的方法 2.Http协议的组成 Http协议由Http请求和Http响应组成,当在浏览器中输入网址访问某个网站时,    你的浏览器会将你的请求封装成一个Http请求发送给服务器站点,服务器接收到请    求后会组织响应数据封装成一

JavaEE之Http协议和Tomcat服务器

Http协议 什么是Http协议 HTTP,超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的         一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为         了提供一种发布和接收HTML页面的方法 Http协议的组成 Http协议由Http请求和Http响应组成,当在浏览器中输入网址访问某个网站时,         你的浏览器会将你的请求封装成一个Http请求发送给服务器站点,服务器接收到请      

Http协议和Tomcat服务器

一.http协议:  超文本传输协议 2.组成 hhtp协议由一个请求和响应组成,当在浏览器中输入网址访问某个网站时,浏览器会将去请求封装成一个hhtp请求发送给服务站点 ,服务器接收到请求后会组织响应数据,封装成一个http响应返回给浏览器. 即,没有请求既没有响应. 1)请求行 请求方式:get  post 协议版本:HTTP/1.1 HTTP/1.0,发送请求,创建一次连接,获得一个web资源,连接断开. HTTP/1.1,发送请求,创建一次连接,获得多个web资源,保持连接. 2)请求头

[转]配置Apache服务器支持https协议和SSL证书

建立网站时,特别是支付网站和电子商务网站,为了让客户信赖网站,让他们不把我们当做骗子,网站一般会安装SSL,我们访问网站时都是以https开头的,而不是以http开头的.下面是在windows环境下配置Apache服务器支持https协议和SSL证书. 1.配置Apache服务器支持openssl 配置Apache服务器支持https协议和SSL证书,最基本的要求是Apache包含openssl模块.在Windows下面单独安装openssl比较麻烦,最好还是安装那种绑定openssl的apac

Linux下搭建Apache服务器(完整版)

Linux下搭建Apache服务器(完整版) 什么是Apache? Apache Licence是著名的非盈利开源组织Apache采用的协议.该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件).需要满足的条件也和BSD类似 Apache主要特点 1.开放源代码.跨平台应用 2.支持多种网页编程语言 3.模块化设计 .运行稳定.良好的安全性 Apache软件版本 1.X  1.目前最高版本是1.3,运行稳定  2.向下兼容性较好,但缺乏一些较新

linux服务之http协议和httpd的配置(一)

http协议和httpd的配置 URL:Unifrom Resource Locator URL方案:scheme 服务器地址:ip:port 资源路径: http://www.magedu.com:80/bbs/index.php, https:// 基本语法: <scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<fra

Android即时通讯开发之XMPP (一)初识XMPP协议和asmack

在讲XMPP和asmck之前 ,我还是先分享一些资源文档,如果你有耐心,可以直接忽略我下面所写的.下面有关XMPP的介绍大部分是摘抄网上的文档,后面我会写一些基于XMPP协议和asmck开源库的聊天室开发,功能包括,文本,语音,和当前地理位置地址. XMPP官网:http://xmpp.org Smack开发官方指导文档:http://www.igniterealtime.org/builds/smack/dailybuilds/documentation/extensions/index.ht