URL 统一资源定位符
http协议的版本:
http/0.9:1991,仅传输文本文档
http/1.0:支持多媒体数据的处理
http/1.1:
http事务:一次请求加一次相应
http方法:get和put,post,delete
http协议:是一种无状态协议
一次事务结束后,链接及行断开
加速方式:并行请求,持久链接
http请求方法:
get,head
post,put,delete,options,trace
get:请求获取一个资源,需要服务器发送
head:和get相似,只要头部,不要资源
post:支持html的表单提交。
put:与get相反,向服务器写入文档
delete:请求删除url指向的资源
options:探测服务器端对某资源的支持
trace:跟踪请求要进过的防火墙
http的状态吗:
1xx;信息状态码
2xx:成功状态码
3xx:重定向状态码
301:永久重定向
302:临时重定向,在报文相应中使用“location:URL’
4xx:客户端类的错误
403:拒绝访问
404:没有资源
405:不允许使用此方法来请求url
5XX:服务器类的错误
500:服务器内部错误
502:从上游收到一个伪响应
503:服务器此时无法提供服务
http首部:
通用首部:请求和相应都可以使用
Conection:定义c/s之间关于请求/响应的有关选向
via:显示报文经过的中间节点
cache-control:缓存指示
请求首部:
Client-ip:
host:请求的主机名和端口号
Referer:指名了包含当前资源的文档的url,及就是上一个资源的url
user-agent:用户代理
Accept:指名服务器能发送的媒体类型
Accept-Charset:支持使用的字符集
Accept-Encoding:支持使用的编码方式
相应首部:
实体首部:用于指定实体属性
拓展首部:非标准首部,可能有程序开发者创建的
一次web请求的基本过程:
建立链接:
接受请求:
处理请求:
访问资源:
构建响应:
发送响应:
记录日志:
web服务器的i/o结构:
单线成结构:
多线程结构:
复用的I/O结构:单个线程响应多个请求
复用的多线程结构:多个线程,每个线程响应多个请求
httpd:高度模块化
MPM:多道处理模块
prefork:一个进程一个请求
最大上线是1024
worker:一个进程多个线程,一个线程一个请求
event:一个线程响应多个请求
event-driven:事件驱动,主要目的在于实现单线成响应多个请求
功能特性:
路径别名:alias
用户认证:authentication
虚拟主机:
反向代理:
负载均衡:
用户站点:
安装http:
服务脚本:
/etc/rc.d/init.d/httpd
脚本配置文件:/etc/sysconfig/httpd
运行目录:/etc/httpd
配置文件:
主配置文件:/etc/httpd/conf/httpd.conf
拓展配置文件:/etc/httpd/confd/*.conf
文档根目录:/var/www/html
配置文件的格式:
配置参数 值
注:配置文件不区分大小写
文件格式:
全局配置
主机配置:用于仅提供一个站点
虚拟主机:用于提供多个站点
配置文件的测试语法
service httpd configtest
或httpd -t
绝大数配置修改后,可以通过service httpd reload来生效;如果修改监听的地址或者端口,必须重启服务才能生效
配置的内容:
1,监听套接子
Listen [IP:]port
2,配置使用keep alive
KeepAlive {On|Off} 是否使用持久换保持
KeepAliveTimeout 2
MaxKeepAliveRequests 50
3,MPM配置
系统默认启动的模块可以通过#httpd -l来查看
系统默认启动的I/O结构为prefork结构
如果想启动worker:
1,使用service httpd.worker start来启动
2.或者配置脚本配置文件/etc/sysconfig/httpd 去掉注释
如果向启动event:方法一样
<IfModule prefork.c> 如果mod_userdir.c文件存在,则是用以下的配置文件
StartServers 默认启动工作进程数
MinSpareServers 最小空闲进程数
MaxSpareServers 最大空闲进程数
ServerLimit 最大活动状态进程数
MaxClients 最大并发连接数
MaxRequestsPerChild 每个子进程在生命周期内所能服务的最大请求个数
</IfModule>
<IfModule worker.c>
StartServers
MaxClients
MinSpareThreads 最小空闲线程数
MaxSpareThreads
ThreadsPerChild 每个子进程可以生成的线程数
MaxRequestsPerChild 每个子进程所响应的最多个数,0表示不做限定
</IfModule>
4,DSO模块的加载方式
LoadModule auth_basic_module /path
#httpd -M:列出已经装载的DSO模块
#httpd -l:列出非DSO模块
5,配置站点根目录
DocumentRoot /path
<Directory /path> 页面访问属性
Options:
Indexs:缺少指定的默认页面时,将站点的文件目录展现给用户。
FollowSymLinks:允许跟随符号链接所指向的原文件
None:所有都启用
All:所有否不启用
ExecCGI:允许使用mod_cgi模块执行CGI脚本
Includes:允许使用mod_incliude模块实现服务器端包含(SSI)
MiltiViews:允许使用mod_negotiation实现内容协商
SymLinkIfOwnerMatch:在链接文件的属主组和原始文件相同时,允许跟随符号链接所指向的原文件
AllowOverride None
</Directory>
6,基于主机的访问控制
<Directory />
Options
AllowOverride 表示一下内容是否被禁用,None表示不禁用
Order Allow,Deny 表示次序
Allow from ip/all
Deny
</Directory>
7,基于用户的访问控制
虚拟用户:是在访问某一文件而存在用户,不具有系统的任何权限
认证类型:
basic:基本认证,帐号密码进行明文发送
digest:摘要认证
配置方式:
<Directory "/path">
Options None
AllowOverride AuthConfig
AuthType Basic 认证类型,表示使用那一种认证机制
AuthName “” 认证机制的名称
AuthUserFile /path 基于用户认证时需要的文件
Require valid—user
</Directory>
使用此机制的用户添加
#htpasswd -c -m 文件名 用户
-c:创建文件 -m:添加用户
基于用户组的认证
将原有的配置中的AuthUserFile 替换成AuthGroupFile
在将原有配置中的Require valid-user 替换成Require group group_name
也可以将两个放在一起,进行两种访问控制
8,定义默认页面
DirectoryIndex index.php index.html
9,用户目录
如果期望让每个用户都可以创建个人站点:访问格式
userdir disablied:表示禁止
userdir public_html:表示用户家目录名称,注:用户的家目录的赋予运行httpd进程的用户拥有执行权
10,配置日志功能
定义访问日志的功能
Customlog ‘"/path" 日志name
LogFormat "宏定义" 日志名称
宏定义:
%h:客户端地址
%l:远程登录名,通常为-
%u:认证时的远程用户名,没有认证时通常伪-
%t:收到请求时的时间
%r:请求报文的起始行
%>s:响应状态码
%b:响应报文的长度,以字节伪单位
%{Header_name}i:记录指定请求报文首部的内容
错误日志ErroeLog "/path"
11,路径别名
Alias 别名 "真路径"
12,指定默认字符集
AddDefaultCharset utf-8
httpd配置(2)
13,脚本路径别名
URL->>filesystem directory
CGI:通用网管接口
ScriptAliase /URL/ "/path/" path路仅下的文件全部执行完了之后将结果返还给用户
详细在/var/www/cgi-bin下
14,虚拟主机 (使用虚拟主机,要关闭主机)
一个物理服务器提供多个站点
基于不同的ip实现不同的虚拟
变化IP
基于不同的port实现不同虚拟主机
变化端口
基于不同的FQDN实现不同的虚拟主机
变化ServiceName 其中伪*.80
<VirtualHost *:80>
ServerName
DocumentRoot “”
<Directory "">
ServiceAliase
ServiceAdmin
</VirtualHost *:80>
日志滚动:
就是创建新的日志文件,将原有的日志文件进行重命名
15,https的实现
https:是二进制格式协议,监听在443端口
SSL会话基于ip地址进行,不支持基于FQDNDE虚拟主机上实现
在httpd基于mod_ssl模块实现ssl的支持
a,准备证书和密钥
b,安装mod_ssl模块
c,配置ssl.conf文件
配置使用ssl的虚拟主机
ServerName
DocumentRoot ""
配置证书和私钥
SSLCertificatFile 证书文件
SSLCertificatKeyFile 密钥文件
d.重启
16.页面压缩
在配置文件中使用#mod_deflate configuration模块
SetOutputFilter DEFLATE //启用DEFLATE
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE 文件类型(如text/html)
BrowserMatch ... #进行浏览器匹配,解决浏览器不支持压缩页面的解压
</IfModule>
安装httpd2.4在原有的基础上
下载apr-1.5.2.tar.gz,apr-util-1.5.4.tar.gz,httpd-2.4.5.tar.gz
编译安装
1,先安装apr
a,先安装pcre-devel
yum install pcre-devel
yum -y groupinstall
b,./configure –prefix=/usr/local/apr
c,
2,在安装apr-util
a,./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
b,
3.在安装httpd
httpd2.4新特性
1)MPM支持在运行时装载
--enable-mpms-shared=all --with-mpm=event 启用默认的event
2) 支持event
3)异步读写
4) 在每模块及每目录上指定日志级别
5)每请求配置:<If> <Elseif>
6) 增强版的表达式分析器
7) 毫秒级的keepalive timeout
8)支持主机名的虚拟主机不在需要NameVirtualHost指令
9) 支持使用自定义变量
新增一些模块:mod_proxy_fcgi,mod_ratelimit,mod_request,mod_remoteip
对于基于IP的访问做了修改,不在使用order,allow,deny这些机制;而是统一使用require进行
编译安装
a,./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --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-modeles=most(常用的) --enable-mpms-shared=all --with-mpm=event
make && make install
b,头文件、库文件、帮助文档、二进制
c,后续的配置
1 导出头文件
ln -sv /usr/local/appache/include /usr/include/httpd
2 导出库文件
ldconfig -p 显示当前系统的库文件
???
3 导出帮助文件
修改vim /etc/man.config
4 修改环境变量
编辑/etc/profile.d/httpd
export PATH=/usr/local/apache/bin:$PATH
5.编辑/etc/rc.d/init.d.httpd脚本,或者复制。
配置虚拟主机 修改httpd-vhosts.conf
基于IP访问控制:
允许所有主机访问:Require all granted
拒绝所有主机访问:Require all deny
控制某主机的访问
Require ip IPADDR
Require not ip IPADDR
IPADDR:
单个IP地址,例如172.16.100.7
network/netmask 例如172.16.0.0/255.255.0.0
network/Length 例如172.16.0.0/16
Net 172.16
Require host IPADDR
Require not host IPADDR
Hostname
GQDN:具体的主机
域:.magedu
设置为service启动
1,复制/etc/rc.d/init.d/http 为/etc/rc.d/init.d/http24
2,vim http24
apachectl=/usr/local/apache/bin/apachectl
httpd=/usr/local/apache/bin/httpd
prog=httpd
pidfile=
PIDFILE−/var/run/httpd24.pidlockfile=
{LOCKFILE-/var/lock/subsys/httpd24}
在httpd24配置文件中加入Pidfile "/var/run/httpd24.pid"
3.可以启动了