一、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)、空行和请求数据几个部分组成,报文格式如:
请求行:由请求方法(在下面介绍)字段、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的配置文件介绍
[Shell] 纯文本查看 复制代码
/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地址、端口号、域名三种方式
[Shell] 纯文本查看 复制代码 6、Apache的管理命令
[iyunv@localhost conf]# service httpd start #启动服务
[iyunv@localhost conf]# service httpd stop #停止服务
[iyunv@localhost conf]# service httpd restart #重启服务
[iyunv@localhost conf]# service httpd reload #重新加载
[iyunv@localhost conf]# service httpd status #查看服务状态
[iyunv@localhost conf]# service httpd configtest #测试配置文件语法
[iyunv@localhost conf]# httpd -t #测试配置文件语法
7、配置所选用的MPM属性
配置所使用编译进不同的MPM的Httpd,编辑/etc/sysconfig/httpd配置文件,定义如下行: HTTPD=/usr/sbin/httpd.worker
MPM:多道处理模块
prefork:一个进程响应一个请求
worker:一个进程生成多个线程,一个线程响应一个请求
event:一个主进程生成多个子进程,每个子进程处理多个请求,此模块V2.4版本以后才有
8、主配置文件指令介绍
### 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 #每个子进程在生存期内允许最大请求量
# worker MPM
#检查是否使用worker模块,如果使用prefork模块,则此配置生效
StartServers 4 #系统启动时建立的了进程数
MaxClients 300 #最大客户端连接数,超过则排队
MinSpareThreads 25 #最小空闲线程数
MaxSpareThreads 75 #最大空闲线程数
ThreadsPerChild 25 #每个子进程建立的线程数
MaxRequestsPerChild 0 #每个子进程在生存期内允许最大请求量
Listen 80 #监听的TCP端口
LoadModule rewrite_module modules/mod_rewrite.so #加载模块指令
Include conf.d/*.conf #配置包含conf.d目录下的所有文件
ExtendedStatus On #跟踪每个请求的扩展状态信息
#将封装的指令用于匹配URL
SetHandler server-status #强制所有匹配的文件被一个指定的处理器处理
Order deny,allow #控制默认的访问状态与Allow和Deny指令生效的顺序 注:Deny在Allow前,默认允许所有访问;Deny在Allow后默认拒绝所有访问
Deny from all #拒绝所有,可以是主机地址、网段
Allow from .example.com #允许这个域的所有主机访问
User apache #服务运行时的用户
Group apache #请求提供服务的Apache子进程运行时的用户组
### Section 2: 'Main' server configuration
ServerAdmin root@localhost #指定管理员邮箱
ServerName [url]www.example.com:80[/url] #指定主机名和端口
DocumentRoot "/var/www/html" #指定默认网页访问路径
#封装一组指令,使其对某个目录生效
Options None #配置特定目录中可以使用哪些特性
AllowOverride AuthConfig #确定允许存在于.htaccess文件中的指令类型
Order allow,deny
Allow from all #允许所有;可以是主机地址、网段
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脚本
Options Indexes FollowSymLinks #Indexes:如果请求的文件是一个链接文件,链接到其他目录中,是否允许访问;另一个:是否允许在此目录中使用符号连接
AllowOverride None #表示忽略.htaccess文件,不会读取该文件
Order allow,deny
Allow from all
AddDefaultCharset UTF-8 #指定默认字符集
AddType application/x-gzip .gz .tgz #指定文件扩展名与特定的内容类型建立映射
### Section 3: Virtual Hosts
NameVirtualHost *:80 #开启虚拟主机
#配置虚拟主机与NameVirtualHost配合使用
ServerAdmin [email]root@.example.com[/email]
DocumentRoot /www/docs/dummy-host.example.com
ServerName [url]www.example.com[/url]
ErrorLog logs/dummy.example.com-error_log
CustomLog logs/dummy.example.com-access_log common
#下面一组指令写在主服务器则全部生效,写在某个虚拟主机中,则只有那个虚拟主机生效
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表示所有用户都可以访问
9、配置实例,首先我们需要把SELinux与Iptables关闭。
[iyunv@localhost ~]# setenforce 0
[iyunv@localhost ~]# service iptables stop
1)、安装Apache软件包,可以直接启动服务,这样就可以访问默认站点
[iyunv@localhost ~]# yum -y install httpd
[iyunv@localhost ~]# rpm -q httpd #查看已安装的软件包
httpd-2.2.15-26.el6.centos.x86_64
[iyunv@localhost ~]# service httpd start
在/var/www/html目录下建立一个文件“index.html”写入内容为"default"可以直接访问,如下:
[Shell] 纯文本查看 复制代码 2)、新建一个基于域名虚拟主机并做访问验证,如下:
[iyunv@localhost ~]# mkdir -pv /www/host1 # 创建网站存放目录
mkdir: 已创建目录 "/www/host1"
[iyunv@localhost ~]# echo "host1" > /www/host1/index.html #为网站创建默认主页
[iyunv@localhost ~]# vim /etc/httpd/conf/httpd.conf #打开主配置文件
#DocumentRoot "/var/www/html" #注释此行
NameVirtualHost *:80 #去掉此行注释
#创建虚拟主机
DocumentRoot /www/host1 #指定网站根目录
ServerName [url]www.host1.com[/url] #指定主机名
ErrorLog logs/host1_error.log #错误日志
CustomLog logs/host1_access.log common #访问日志
#为新建的虚拟主机添加权限为允许所有
Options None
AllowOverride None
Order allow,deny
Allow from all
[iyunv@localhost conf]# service httpd restart #重启服务
基于域名访问,由于我们没有DNS服务器做解析,需要在本地添加Hosts记录,如:
C:WindowsSystem32Driversetchosts #打开些文件添加如下内容
172.16.14.1 [url]www.host1.com[/url]
使用域名访问,如下图:
3)、添加一个基于域名访问,但需要用户验证的网站,如:
[Shell] 纯文本查看 复制代码
[iyunv@localhost ~]# mkdir -pv /www/host2
mkdir: 已创建目录 "/www/host2"
[iyunv@localhost ~]# echo "host2" > /www/host2/index.html
[iyunv@localhost ~]# vim /etc/httpd/conf/httpd.conf
NameVirtualHost 172.16.14.1:80 #设置虚拟主机IP地址,有多个虚拟主机,这里必须写IP
DocumentRoot /www/host2
ServerName [url]www.host2.com[/url]
ErrorLog logs/host2_error.log
CustomLog logs/host2_access.log common
#为[url]www.host2.com[/url]主机设置认证
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地址访问
#创建两个认证用户,用户名密码相同,-c:创建每一次创建认证文件时使用
[iyunv@localhost ~]# htpasswd -c -m /etc/httpd/conf/.htpass centos
[iyunv@localhost ~]# htpasswd -m /etc/httpd/conf/.htpass redhat
C:WindowsSystem32Driversetchosts #客户端添加如下行
172.16.14.1 [url]www.host2.com[/url]
使用不同用户测试是否能访问,如下图:
使用不同的IP地址访问,如下图:
三、基于SSL加密网站 注:为了方便实验,WEB服务器和CA服务器在一台服务器;在密钥生成过程中,主机名要一致,而在访问过程中也要使用生成密钥文件时填写的主机名,否则使用主机名访问不成功
1、安装SSL的模块
[Shell] 纯文本查看 复制代码
[iyunv@localhost ~]# yum -y install mod_ssl
2、为HTTP服务器自己生成一个私钥文件如下图:
注释:图中"()"代表只在当前子Shell进程中有效 openssl:生成私钥关键字 genrsa:使用rsa加密方式生成私钥 -out:指定输出文件 ftp.key:指定输出生成私钥的文件名称,文件名可以自己定义 2048:表示生成私钥加密的长度(默认为512) 3、从私钥文件中制作一个证书签署请求,如下图:
注释: req:证书申请签名管理 -new:制作证书申请 -key:指定私钥文件 4、为CA服务器生成一个私钥文件,如下图:
5、使用刚刚生成的私钥为自己生成一个自签证书,如下图:
注释:-x509:表示制作一个自签证书 -days:表示证书申请后可以使用的天数 6、创建两个文件如:
[Shell] 纯文本查看 复制代码
[iyunv@localhost ~]# touch /etc/pki/CA/{index.txt,serial}
[iyunv@localhost ~]# echo "01" > /etc/pki/CA/serial
7、为WEB服务器签署证书,如下图:
8、修改/etc/httpd/conf.d/ssl.conf配置文件如:
[Shell] 纯文本查看 复制代码
[iyunv@localhost ~]# vim /etc/httpd/conf.d/ssl.conf
DocumentRoot "/www/host1" #修改为需要加密的网站目录
ServerName [url]www.host1.com:443[/url] #改为自己的域名
SSLCertificateFile /etc/pki/CA/cahttp.crt #HTTP服务器的证书
SSLCertificateKeyFile /etc/pki/CA/http.key #HTTP服务器的私钥
[iyunv@localhost httpd]# service httpd restart #重启HTTP服务
9、把CA服务器的密钥下载到本地,重命名文件名为.crt格式的文件;安装到受信任证书,如下图:
再次打开证书查看,如下图:
10、使用浏览器来访问www.host1.com域名验证是否成功,如下图:
后续会更新编译安装方式LAMP平台及详细配置,敬请关注。。。
|