loip 发表于 2013-8-22 08:57:16

Http协议及apache配置笔记

一、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 Error502:Bad Gateway 504:Gateway Timeout

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


/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的管理命令
# service httpd start       #启动服务
# service httpd stop      #停止服务
# service httpd restart   #重启服务
# service httpd reload      #重新加载
# service httpd status      #查看服务状态
# service httpd configtest#测试配置文件语法
# 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                #最大客户端连接数,超过则排队
MaxRequestsPerChild4000         #每个子进程在生存期内允许最大请求量

# worker MPM
               #检查是否使用worker模块,如果使用prefork模块,则此配置生效
StartServers         4            #系统启动时建立的了进程数
MaxClients         300            #最大客户端连接数,超过则排队
MinSpareThreads   25            #最小空闲线程数
MaxSpareThreads   75            #最大空闲线程数
ThreadsPerChild   25            #每个子进程建立的线程数
MaxRequestsPerChild0            #每个子进程在生存期内允许最大请求量

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 www.example.com:80       #指定主机名和端口
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 root@.example.com
    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

#下面一组指令写在主服务器则全部生效,写在某个虚拟主机中,则只有那个虚拟主机生效

    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关闭。
# setenforce 0
# service iptables stop
1)、安装Apache软件包,可以直接启动服务,这样就可以访问默认站点
# yum -y install httpd
# rpm -q httpd          #查看已安装的软件包
httpd-2.2.15-26.el6.centos.x86_64
# service httpd start在/var/www/html目录下建立一个文件“index.html”写入内容为"default"可以直接访问,如下:2)、新建一个基于域名虚拟主机并做访问验证,如下:
# mkdir -pv /www/host1               # 创建网站存放目录
mkdir: 已创建目录 "/www/host1"
# echo "host1" > /www/host1/index.html #为网站创建默认主页
# 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               #访问日志

                                 #为新建的虚拟主机添加权限为允许所有
    Options None
    AllowOverride None
    Order allow,deny
    Allow from all

# service httpd restart             #重启服务
基于域名访问,由于我们没有DNS服务器做解析,需要在本地添加Hosts记录,如:
C:WindowsSystem32Driversetchosts          #打开些文件添加如下内容
172.16.14.1         www.host1.com使用域名访问,如下图:
3)、添加一个基于域名访问,但需要用户验证的网站,如:







# mkdir -pv /www/host2            
mkdir: 已创建目录 "/www/host2"
# echo "host2" > /www/host2/index.html
# 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

               #为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地址访问

#创建两个认证用户,用户名密码相同,-c:创建每一次创建认证文件时使用
# htpasswd -c -m /etc/httpd/conf/.htpass centos
# htpasswd -m /etc/httpd/conf/.htpass redhat
C:WindowsSystem32Driversetchosts    #客户端添加如下行
172.16.14.1         www.host2.com使用不同用户测试是否能访问,如下图:

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

三、基于SSL加密网站注:为了方便实验,WEB服务器和CA服务器在一台服务器;在密钥生成过程中,主机名要一致,而在访问过程中也要使用生成密钥文件时填写的主机名,否则使用主机名访问不成功
1、安装SSL的模块




# yum -y install mod_ssl2、为HTTP服务器自己生成一个私钥文件如下图:
注释:图中"()"代表只在当前子Shell进程中有效   openssl:生成私钥关键字   genrsa:使用rsa加密方式生成私钥   -out:指定输出文件   ftp.key:指定输出生成私钥的文件名称,文件名可以自己定义   2048:表示生成私钥加密的长度(默认为512)3、从私钥文件中制作一个证书签署请求,如下图:注释: req:证书申请签名管理    -new:制作证书申请    -key:指定私钥文件4、为CA服务器生成一个私钥文件,如下图:5、使用刚刚生成的私钥为自己生成一个自签证书,如下图:
注释:-x509:表示制作一个自签证书    -days:表示证书申请后可以使用的天数6、创建两个文件如:



# touch /etc/pki/CA/{index.txt,serial}
# echo "01" > /etc/pki/CA/serial7、为WEB服务器签署证书,如下图:
8、修改/etc/httpd/conf.d/ssl.conf配置文件如:



# 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服务器的私钥
# service httpd restart #重启HTTP服务9、把CA服务器的密钥下载到本地,重命名文件名为.crt格式的文件;安装到受信任证书,如下图:再次打开证书查看,如下图:10、使用浏览器来访问www.host1.com域名验证是否成功,如下图:后续会更新编译安装方式LAMP平台及详细配置,敬请关注。。。

hudeya 发表于 2013-8-22 15:24:58

怀揣两块,胸怀500万!

ddlddx0000 发表于 2013-8-22 19:13:07

我是来刷分的,嘿嘿

心心失意 发表于 2013-8-22 19:37:23

解释就是掩饰,掩饰就是编故事!

cheng029 发表于 2013-8-23 01:24:40

流氓不可怕,就怕流氓有文化。

yaomint 发表于 2013-8-23 04:20:56

锻炼肌肉,防止挨揍!

q2009a06z22 发表于 2013-8-23 05:03:33

精典之极就是精斑!!!
页: [1]
查看完整版本: Http协议及apache配置笔记