一.htpp协议报文
请求报文语法
<method><request-URL><version> //version为http的版本号
<headers> //http协议首部,有很多如Host,Connection
//空白行 必须的
<entity-body> //报文的主体,get时没有主体部分
响应报文语法
<version><status><reason-phrase> //reason-phrase解释status信息
<headers>
<entity-body>
status类别:
1xx: 纯信息
2xx: 成功类的信息(200)
3xx:重定向类的信息
4xx: 客户端类错误信息
5xx:服务器端错误类信息
web服务器的主要操作:
1.建立连接--接受或拒绝客户端的连接请求
2.接受请求--通过网络读取HTTP请求报文
3.处理请求--解析请求报文并且做出相应的动作
4.访问资源--访问请求报文中的相关的资源
5.构建相应--使用正确的首部生成HTTP响应报文
6.发送响应--向客户端发送生成的响应报文
7.记录日志--当已完成的HTTP事务记录到日志文件
httpdMPM模型:
prefork
worker
even
代理
web代理服务器工作于webk客户端和web服务器端之间,它负责接收来自web客户端的HTTP请求,并将其转发至对应的服务。而后接收来自服务器端的响应,并将响应报文回送至客户端
httpd服务:
事先创建进程
按需维持适当的进程
模块设计,核心比较小,各种功能通过模块添加(包括php)
支持运行配置,支持单模块进行编译
支持多种方式的虚拟主机配置
基于ip的虚拟主机
基于端口的虚拟主机
基于域名的虚拟主机
支持https协议(mod_ssl)
支持用户认证
支持基于ip或主机名的ACL
支持每目录的访问控制
支持URL重写
rpm包安装httpd:
/usr/sbin/httpd (MPM:prefork)
httpd: root root (master process)
httpd: apache apache (worker process)
/etc/rc.d/init.d/httpd //服务脚本
/etc/httpd //程序安装目录
/etc/httpd/conf/ //配置文件目录
主配置文件 httpd.conf
/etc/httpd/conf.d/*.conf //从配置文件
/etc/httpd/modules //模块目录
/etc/httpd/logs ---> /var/log/httpd //日志文件
access_log //访问日志
err_log //错误日志
/var/www/html/ //静态文件目录
/var/www/cgi-bin //提供动态内容目录
web服务器通过cgi与应用程序服务器通信 (cgi 通用网关接口)
主配置文件在/etc/httpd/conf/httpd.conf
用grep "Section" httpd.conf 命令查看配置文件有几段组成
第一段和第三段不能同时生效 中心主机和虚拟主机不能同时共存
配置项不区分字符大小写,但value又是需要区分大小写
配置项
ServerTokens OS //错误时显示httpd服务的版本信息
ServerRoot "/etc/httpd" //服务器的根目录
Timeout 120 //超时时间
KeepAlive Off //是否开启长连接,0为无限制,永不断开
MaxKeepAliveRequests 100 //最大的保持长连接数
DirectoryIndex index.html index.html.var //默认索引文件
//访问日志格式
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog logs/access_log combined //访问日志采用混合模式
<IfModule prefork.c>
StartServers 8 //httpd服务启动时创建多少个进程
MinSpareServers 5 //服务器端最小空闲进程数
MaxSpareServers 20 //服务器端最大空闲进程数
ServerLimit 256 //服务器连接数 一定要比MaxClients 值大
MaxClients 256 //最大的客户端连接数
MaxRequestsPerChild 4000 //一个进程最多响应用户的请求
</IfModule>
<IfModule worker.c>
StartServers 2 //httpd服务启动时创建多少个进程
MaxClients 150 //最大客户端连接数
MinSpareThreads 25 //最小空闲线程数
MaxSpareThreads 75 //最大空闲线程数
ThreadsPerChild 25 //每一个进程可以生成多少个线程
MaxRequestsPerChild 0 //每一个进程能响应多少用户个请求
</IfModule>
Include conf.d/*.conf //包含子配置文件
ServerAdmin root@localhost //服务器管理员
ServerName www.example.com:80 //主机名
UseCanonicalName Off //正式名称
DocumentRoot "/var/www/html" //文档根目录
<Directory "/var/www/html">
Options Indexes FollowSymLinks
None: 不支持任何选项 (默认用这值)
Indexes: 允许索引目录
FollowSymLinks:允许符号链接
Includes: 允许执行服务器端包含
SymLinksifOwnerMatch:允许执行符号链接并且进行限制
ExecCGI: 允许执行CGI脚本
MultiViews: 多功能视图
All:支持所有选项
AllowOverride None //允许覆盖,下面两项
AuthConfig: 允许特定账号访问
AuthType Basic
AuthName "Restricted Site...."
AuthUserFile "/etc/httpd/conf/htpasswd"
Require valid-user //允许所有用户文件里的用户访问
Require user hadoop //允许某个用户访问
基于用户组访问
AllowOverride AuthConfig
AuthType Basic
AuthName "Restricted Site...."
AuthUserFile "/etc/httpd/conf/htpasswd"
AuthGroupFile "etc/httpd/conf/htgroup"
Require group haddop
需要手动建立用户文件
htpasswd //第一次创建使用-c选项 ,第二次不能用,否则覆盖
-D 删除某个用户
-m 采用md5加密
htpasswd -c -m /etc/httpd/conf/htpasswd 用户名
Order allow,deny //次序,先allow后deny,用于定义主机的访问控制功能,ip
Allow from all
</Directory>
MPM(多道处理模块)
prefork 预先创建进程,一个请求用一个进程响应
worker 一个请求用一个线程响应,启动多个进程,每个进程生成多个线程
event 一个进程响应多个请求,基于事件请求模型来处理(2.4 以后版本默认使用event机制)
查看httpd编译的核心模块
httpd -l
服务脚本配置文件
/etc/sysconfig/httpd
给一个ip地址添加一个别名命令
ip addr add 192.168.1.98/24 dev eth0
使用命令查看ip地址别名
ip addr show
虚拟主机的配置(使用基于域名的虚拟主机)停用中心主机,注释配置文件里的DocumentRoot选项
NameVirtualHost 192.168.1.98:80
<VirtualHost 192.168.1.98:80>
ServerName www.luo.com
DocumentRoot "/www/luo" //指定目录不存在需要手动创建
CustomLog /var/log/httpd/luo/access_log combined
//设定某个ip地址不能访问
<Directory "/www/luo">
Options none
AllowOverride none
Order deny,allow
Deny form 192.168.1.200
</Directory>
</VirtualHost〉
<VirtualHost 192.168.1.98:80>
ServerName www.luochen.com
DocumentRoot "/www/luochen" //指定目录不存在需要手动创建
CustomLog /var/log/httpd/luochen/access_log combined
//限制用户访问
<Directory "/www/luochen">
Options none
AllowOverride AuthConfig
Authtype Basic
AuthName "Restrice area ...."
AuthUserFile "/etc/httpd/.htpasswd"
Require valid-user
</Directory>
</VirtualHost〉
SeverName 的值要能被解析 需要直接编辑本机的hosts文件C:\Windows\System32\Drivers\etc
192.168.1.98 www.luochen.com
192.168.1.98 www.luo.com