一、HTTP协议

二、WEB服务器简介、安装与配置

三、基于SSL加密的网站



一、HTTP简介:

HTTP是"Hyper Text Transfer Protocol"(超文本传输协议)的缩写.目前普遍使用的HTTP协议版本为"HTTP 1.1".HTTP是用于从WWW服务器传输超文件到本地浏览器的传送协议,它可以使得浏览器更加高效,使用网络传输减少.它不仅能保证计算机正确快速的传送超文本内容,还可以确定传输文本是的哪一部分内容.HTTP是一个应用层协议,由请求和响应构成,是一个标准的C/S架构模型.HTTP是一个无状态协议.

特点:

1、支持客户端/服务器模式

2、简单快速,客户端向服务器请求服务时,只需要传送请求方法和路径即可

3、灵活,HTTP允许传输任意类型的数据对象.正在传输的类型由Content-Type加以标记

4、无连接,无连接的含义就是限制每次连接只处理一个请求.服务器处理完客户端的请求,并收到客户端的应答后,断开连接.

5、无状态,HTTP协议是无状态协议.无状态是指协议对于事务处理没有记忆能力.缺少状态意味着如果后续处理需要前面的信息,则必须重新传送.

HTTP请求和响应报文:

请求报文:

一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据几个部分组成,报文格式如:

Http协议及apache配置笔记_第1张图片

请求行:由请求方法(在下面介绍)字段、URL字段和HTTP协议版本3个字段组成,用空格分隔.如:GET /index.htm HTTP/1.1

请求头部:由关键字/值对组成,每行一对,关键字与值用英文模式的":"分隔.请求头部通知服务器有关于客户端请求的信息,典型的请求头部有:

User-Agent:产生请求的浏览器类型

Accept:客户端可识别的内容类型列表

Host:请求的主机名,允许多个域名同用一个IP地址,即虚拟主机

Accept-Lanague:告诉服务器能够发送哪些语言

Referer:提供了包含当前请求URI文档的URL

Accept-Charset:接受的字符集

Accept-Encoding:编码方式

空行:最后一个请求头部之后的一个空行,发送回车符和换行符,通知服务器不再有请求头

请求数据:请求数据不在GET方法中使用,而是在POST方法中使用.POST方法适用于需要客户端填写表单的场合

响应报文:

一个HTTP响应报文由三个部分组成,分别是:状态行、消息报头、响应正文.HTTP响应报文格式与请求报文格式类似,如:

   #状态行

 #响应首部

 #返回请求的响应内容

状态行:Vesion表示服务器HTTP协议的版本;Status表示服务器返回的响应状态码(在下面介绍);Reason-Phrase表示状态码的文本描述;状态码由3位数字组成,每个数据定义了响应的类别,有五种可能的取值

HTTP请求方法:

HTTP/1.1协议中共定义了八种方法如:

OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法.

HEAD:仅响应首部信息

GET:向特定的资源发出请求.

POST:向指定资源提交数据进行处理请求.

PUT:向指定资源位置上传新内容.

DELETE:请求服务器删除"Request-URL"所标识的资源.

TRACE:回显服务器收到的请求,主要用于测试.

CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器.

方法名称区分大小写.当某个请求所针对的资源不支持对应的请求方法时,服务器就返回状态码405(Method Not Allowed);当服务器不认识或不支持对应的请求方法时,应返回状态码501(Not Implemented).

状态响应码:

1xx:信息性状态码

100:Continue 101:Switching Protocols

2xx:成功状态码

200:OK

3xx:重写向状态码

301:永久重写向 302:临时重写向 304:Not Modified

4xx:客户端错误状态码

404:Not Found 408:Request Timeout

5xx:服务器端错误状态码

500:Internal Server Error 502:Bad Gateway 504:Gateway Timeout


二、WEB服务器简介及配置

1、Linux下常用的WEB服务器软件有:Apache、Nginx、Tomcat、Lighttpd 在此主要讲解Apache2.2版本.Apache服务器其靠运行和处理方面的稳定性,可靠而优越的性能,成为WEB服务器领域中佼佼者.

2、Apache的配置文件介绍

1
2
3
4
5
6
7
8
/etc/rc.d/init.d/httpd #服务运行脚本
/etc/httpd #配置文件存放路径
/etc/httpd/conf/httpd.conf #主配置文件
/etc/httpd/conf.d/*.conf #扩展配置文件
/var/www/html #默认网站存放目录
/var/www/cgi-bin #默认CGI程序存放目录
/etc/httpd/logs #apache日志生成目录
/etc/httpd/modules #存放apache模块目录

3、Apache的工作机制

在处理动态网站时,Apache使用的则是CGI(通用网关接口),CGI的作用就是让前端服务器和后端的应用程序结合起来,来处理WEB服务器页面内的脚本。当WEB服务器对页面进行处理时,发现有脚本文件,则此时就会调用CGI这个接口来处理该脚本,当应用程序后将处理后的结果返回给WEB服务器,而此时的脚本已被格式化为Html语言格式。WEB服务器不能处理动态网页,而处理动态网页的都是CGI服务器

4、Apache的工作方式:

1)、CGI:Apache响应每一个用户的请求,都启动一个独立进程,而Apache自身也要启用一个进程,来等待用户请求,生成一个WEB进程后,又会生成一个处理进程,处理完成后,每一个进程按照之前配置进行回收

2)、模块化:当用户请求动态内容时,CGI的工作模式中的那个应用程序的进程不在是独立的进程,而是作为Apache的模块存在,在Apache的地址空间中运行

3)、FASTCGI:Apache的工作进程不在是一个独立的进程,而是作为一个服务存在的,当用户请求的页面有动态内容时,服务嘎嘎就向这个服务发起请求进行处理,这种方式的好处是自己有了管理进程的机制,而又是做为一个独立服务,因此可以架设在不同的服务器上

5、配置Apache的工作属性

主配置文件中,Apache指令不区分字符大不写,但约定俗成的慌里习惯:单词首字母大写;但指令的值很有可能区分大小写,有些指令可以重复使用多次

配置文件的构成: 主服务器和虚拟主机不能同时使用

全局配置:对主服务器或虚拟主机都生效,且有些功能是服务器自身属性

主服务器:主网站特性

虚拟主机:虚拟主机及属性的定义,基于IP地址、端口号、域名三种方式

6、Apache的管理命令

1
2
3
4
5
6
7
[root@localhost conf]# service httpd start #启动服务
[root@localhost conf]# service httpd stop #停止服务
[root@localhost conf]# service httpd restart #重启服务
[root@localhost conf]# service httpd reload #重新加载
[root@localhost conf]# service httpd status #查看服务状态
[root@localhost conf]# service httpd configtest #测试配置文件语法
[root@localhost conf]# httpd -t #测试配置文件语法

7、配置所选用的MPM属性

配置所使用编译进不同的MPM的Httpd,编辑/etc/sysconfig/httpd配置文件,定义如下行: HTTPD=/usr/sbin/httpd.worker

MPM:多道处理模块

prefork:一个进程响应一个请求

worker:一个进程生成多个线程,一个线程响应一个请求

event:一个主进程生成多个子进程,每个子进程处理多个请求,此模块V2.4版本以后才有

8、主配置文件指令介绍

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
### Section 1: Global Environment #全局配置
ServerRoot  "/etc/httpd"#指定服务配置文件目录
PidFile run/httpd.pid #指定PID文件路径
LockFile run/httpd.lock #指定锁文件的位置
Timeout 60 #响应超时时间
KeepAlive Off|On #是否允许建立永久连接
MaxKeepAliveRequests 100 #最大请求连接
KeepAliveTimeout 15 #永久连接超时时间
# prefork MPM
 #检查是否使用prefork模块,如果使用prefork模块,则此配置生效
StartServers 8 #系统启动时建立的了进程数
MinSpareServers 5 #保留空闲服务器进程最小进程数
MaxSpareServers 20 #保留空闲服务器进程最大进程数
ServerLimit 256 #
MaxClients 256 #最大客户端连接数,超过则排队
MaxRequestsPerChild 4000 #每个子进程在生存期内允许最大请求量
</IfModule>
# worker MPM
 #检查是否使用worker模块,如果使用prefork模块,则此配置生效
StartServers 4 #系统启动时建立的了进程数
MaxClients 300 #最大客户端连接数,超过则排队
MinSpareThreads 25 #最小空闲线程数
MaxSpareThreads 75 #最大空闲线程数
ThreadsPerChild 25 #每个子进程建立的线程数
MaxRequestsPerChild 0 #每个子进程在生存期内允许最大请求量
</IfModule>
Listen 80 #监听的TCP端口
LoadModule rewrite_module modules/mod_rewrite.so #加载模块指令
Include conf.d/*.conf #配置包含conf.d目录下的所有文件
ExtendedStatus On #跟踪每个请求的扩展状态信息
/server-status#将封装的指令用于匹配URL
SetHandler server-status #强制所有匹配的文件被一个指定的处理器处理
Order deny,allow #控制默认的访问状态与Allow和Deny指令生效的顺序 注:Deny在Allow前,默认允许所有访问;Deny在Allow后默认拒绝所有访问
Deny from all #拒绝所有,可以是主机地址、网段
Allow from .example.com #允许这个域的所有主机访问
</Location>
User apache #服务运行时的用户
Group apache #请求提供服务的Apache子进程运行时的用户组
### Section 2: 'Main' server configuration
ServerAdmin root@localhost #指定管理员邮箱
ServerName www.example.com:80 #指定主机名和端口
DocumentRoot  "/var/www/html"#指定默认网页访问路径
"/var/www/html"#封装一组指令,使其对某个目录生效
Options None #配置特定目录中可以使用哪些特性
AllowOverride AuthConfig #确定允许存在于.htaccess文件中的指令类型
Order allow,deny 
Allow from all #允许所有;可以是主机地址、网段
</Directory>
DirectoryIndex index.html index.html.var #指定访问默认主页文件名
DefaultType text/plain #在服务器无法由其他方法确定内容类型时,发送默认的MIME内容类型
ErrorLog logs/error_log #指定错误日志路径
LogLevel warn #指定错误日志级别
LogFormat  "%h %l %u %t \"%r\" %>s %b"common #定义访问日志的记录格式
CustomLog logs/access_log common #指定日志文件名及格式
Alias /icons/ "/var/www/icons/"#别名:映射URL到文件系统的特定位置
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"#脚本别名:映射一个URL到文件系统并视为CGI脚本
"/var/www/icons">
Options Indexes FollowSymLinks #Indexes:如果请求的文件是一个链接文件,链接到其他目录中,是否允许访问;另一个:是否允许在此目录中使用符号连接
AllowOverride None #表示忽略.htaccess文件,不会读取该文件
Order allow,deny
Allow from all
</Directory>
AddDefaultCharset UTF-8 #指定默认字符集
AddType application/x-gzip .gz .tgz #指定文件扩展名与特定的内容类型建立映射
### Section 3: Virtual Hosts
NameVirtualHost *:80 #开启虚拟主机
 #配置虚拟主机与NameVirtualHost配合使用
ServerAdmin [email protected]
DocumentRoot /www/docs/dummy-host.example.com
ServerName www.example.com
ErrorLog logs/dummy.example.com-error_log
CustomLog logs/dummy.example.com-access_log common
</VirtualHost>
#下面一组指令写在主服务器则全部生效,写在某个虚拟主机中,则只有那个虚拟主机生效
"/var/www/html/">
Options Indexes #
AllowOverride AuthConfig #允许使用与认证授权相关指令
AuthName  "Only for employees."#为授权域设置名称,自定义
AuthType Basic #用户认证类型;
AuthUserFile /etc/httpd/conf/.htpass #设定一个含有认证使用的用户名:密码列表的文本文件
AuthGroupFile /etc/httpd/conf/.Ghtpass #设定一个含有认证使用的用户组列表的文本文件
Require valid-user #指定哪些认证用户允许访问该资源;valid-user表示所有用户都可以访问
</Directory>

9、配置实例,首先我们需要把SELinux与Iptables关闭。

1
2
[root@localhost ~]# setenforce 0
[root@localhost ~]# service iptables stop

1)、安装Apache软件包,可以直接启动服务,这样就可以访问默认站点

1
2
3
4
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# rpm -q httpd #查看已安装的软件包
httpd-2.2.15-26.el6.centos.x86_64
[root@localhost ~]# service httpd start

Http协议及apache配置笔记_第2张图片

在/var/www/html目录下建立一个文件“index.html”写入内容为"default"可以直接访问,如下:

Http协议及apache配置笔记_第3张图片

2)、新建一个基于域名虚拟主机并做访问验证,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@localhost ~]# mkdir -pv /www/host1 # 创建网站存放目录
mkdir: 已创建目录 "/www/host1"
[root@localhost ~]# echo "host1" > /www/host1/index.html #为网站创建默认主页
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf #打开主配置文件
#DocumentRoot "/var/www/html" #注释此行
NameVirtualHost *:80 #去掉此行注释
 #创建虚拟主机
DocumentRoot /www/host1 #指定网站根目录
ServerName www.host1.com #指定主机名
ErrorLog logs/host1_error.log #错误日志
CustomLog logs/host1_access.log common #访问日志
</VirtualHost>
"/www/host1"#为新建的虚拟主机添加权限为允许所有
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>
[root@localhost conf]# service httpd restart #重启服务

基于域名访问,由于我们没有DNS服务器做解析,需要在本地添加Hosts记录,如:

1
2
C:\Windows\System32\Drivers\etc\hosts #打开些文件添加如下内容
172.16.14.1 www.host1.com

使用域名访问,如下图:

Http协议及apache配置笔记_第4张图片3)、添加一个基于域名访问,但需要用户验证的网站,如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@localhost ~]# mkdir -pv /www/host2 
mkdir: 已创建目录 "/www/host2"
[root@localhost ~]# echo "host2" > /www/host2/index.html
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
NameVirtualHost 172.16.14.1:80 #设置虚拟主机IP地址,有多个虚拟主机,这里必须写IP
DocumentRoot /www/host2
ServerName www.host2.com
ErrorLog logs/host2_error.log
CustomLog logs/host2_access.log common
</VirtualHost>
"/www/host2"#为www.host2.com主机设置认证
Options None
AllowOverride AuthConfig
AuthName "Host2"
AuthType Basic #基本认证
AuthUserFile /etc/httpd/conf/.htpass
Require user centos #指定只能centos用户可以访问
Order allow,deny #拒绝所有
Allow from 172.16.254.37 #只允许这个IP地址访问
</Directory>
#创建两个认证用户,用户名密码相同,-c:创建每一次创建认证文件时使用
[root@localhost ~]# htpasswd -c -m /etc/httpd/conf/.htpass centos
[root@localhost ~]# htpasswd -m /etc/httpd/conf/.htpass redhat
C:\Windows\System32\Drivers\etc\hosts #客户端添加如下行
172.16.14.1 www.host2.com

使用不同用户测试是否能访问,如下图:

Http协议及apache配置笔记_第5张图片

Http协议及apache配置笔记_第6张图片

Http协议及apache配置笔记_第7张图片

Http协议及apache配置笔记_第8张图片

使用不同的IP地址访问,如下图:

Http协议及apache配置笔记_第9张图片

Http协议及apache配置笔记_第10张图片


三、基于SSL加密网站 

注:为了方便实验,WEB服务器和CA服务器在一台服务器;在密钥生成过程中,主机名要一致,而在访问过程中也要使用生成密钥文件时填写的主机名,否则使用主机名访问不成功

1、安装SSL的模块

1
[root@localhost ~]# yum -y install mod_ssl

2、为HTTP服务器自己生成一个私钥文件如下图:

注释:图中"()"代表只在当前子Shell进程中有效

openssl:生成私钥关键字

genrsa:使用rsa加密方式生成私钥

-out:指定输出文件

ftp.key:指定输出生成私钥的文件名称,文件名可以自己定义

2048:表示生成私钥加密的长度(默认为512)

3、从私钥文件中制作一个证书签署请求,如下图:

Http协议及apache配置笔记_第11张图片

注释: req:证书申请签名管理

-new:制作证书申请

-key:指定私钥文件

4、为CA服务器生成一个私钥文件,如下图:

5、使用刚刚生成的私钥为自己生成一个自签证书,如下图:

Http协议及apache配置笔记_第12张图片

注释:-x509:表示制作一个自签证书

-days:表示证书申请后可以使用的天数

6、创建两个文件如:

1
2
[root@localhost ~]# touch /etc/pki/CA/{index.txt,serial}
[root@localhost ~]# echo "01" > /etc/pki/CA/serial

7、为WEB服务器签署证书,如下图:

Http协议及apache配置笔记_第13张图片

8、修改/etc/httpd/conf.d/ssl.conf配置文件如:

1
2
3
4
5
6
[root@localhost ~]# vim /etc/httpd/conf.d/ssl.conf
DocumentRoot  "/www/host1"#修改为需要加密的网站目录
ServerName www.host1.com:443 #改为自己的域名
SSLCertificateFile /etc/pki/CA/cahttp.crt #HTTP服务器的证书
SSLCertificateKeyFile /etc/pki/CA/http.key #HTTP服务器的私钥
[root@localhost httpd]# service httpd restart #重启HTTP服务

9、把CA服务器的密钥下载到本地,重命名文件名为.crt格式的文件;安装到受信任证书,如下图:

Http协议及apache配置笔记_第14张图片

再次打开证书查看,如下图:

Http协议及apache配置笔记_第15张图片

10、使用浏览器来访问www.host1.com域名验证是否成功,如下图:

Http协议及apache配置笔记_第16张图片

后续会更新编译安装方式LAMP平台及详细配置,敬请关注。。。