15 Apache之httpd(上)
传输层:提供进程地址
tcp:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路
0-65535udp:User Datagram Protocol ,无连接协议;
0-65535Port number:
socket:IPC(进程间通信)的一中实现,允许位于不同主机 (甚至同一主机)上不同进程之间进行通信,数据交换;Socket API
22:tcp(ssh)
53:tcp(dns)
80:tcp(http)
443:tcp(https)
1-1023
1024-41951:注册端口,但要求并不是特别严格,可分配给程序注册为某应用使用
41952+:动态端口,又叫私有端口,供临时分配时使用 。客户端使用随机的端口
常用端口:
SOCK_STREAM:tcp套接字
SOCK_DGRAM:udp套接字
SOCK_RAW:裸套接字
tcp协议的特性:
建立连接:三次握手
数据打包成段:校验和 (使用CRC-32算法)
确认、重传以及超时
排序、逻辑序号:指出该段中的数据位于数据流中的什么位置
流量控制:滑动窗口。每次确认时实现报文接收的空间大小告诉对方,从而实现流量控制
拥塞控制:慢启动和拥塞避免算法 避免发送方发送比较快导致压垮网络和接收方
Socket Domain(根据其所使用的地址分类):
流:可靠地传递、面向连接、无边界
数据报:独立性、不可靠地传递、无连接、有边界
AF_INET:Address Family ,IPv4
AF_INET6:IPv6
AF_UNIX:同一主机上不同进程之间通信时使用,免得再进行tcp/ip封装等
每类套接字都至少提供了两种socket(传输机制):流,数据报
套接字相关的系统调用:
socket():向内核申请注册使用,创建一个套接字 bind():绑定,声明要使用它 listen():监听 accept():接收请求 connect():请求连接建立 write():发送 read():接收 send(),recv(),sendto(),recvfrom()
http:hyper text transfer protocol
HTTP/0.9:原型版本。功能简陋,不支持MIME
HTTP/1.0:引入MIME机制等
HTTP/1.1:增强缓存功能
spdy:
HTTP/2.0:
URL:统一资源定位符
URN:统一资源命名符
静态
动态
CSS、js、MIME(多用途互联网邮件扩展),实现基于文本格式发送非文本数据
html:编程语言,超文本标记语言
Web资源
URI:统一资源标识符
http协议版本:
一次完整的http请求过程:
对请求报文进行解析,并获知请求的资源及请求方法等相关信息
接收来自网络的请求报文中对某资源的一次请求的过程:
并发访问响应类型(web I/O)
多线程模型:一个进程生成N个线程,每个线程响应一个请求
事件驱动:一个进程同N个客户端进行通
单进程I/O结构:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行访问
多进程I/O结构:并行启动多个进程,每个进程 响应一个请求
复用I/O结构:一个进程响应多个请求
复用的多进程I/O结构:启动多个进程,每个进程响应单个或多个请求
建立或处理连接:接收或拒绝请求
接收请求:
处理请求:
访问资源:获取请求报文中请求的资源
构建响应报文
发送响应报文
记录日志
http服务程序:
httpd(apache的程序名,apache已成为一开源组织的代称)
nginx
lighttpd
应用程序服务器:
IIS
tomcat,jetty(前两者开源),jboss,resin
websphere(IBM),weblogic,oc4j
glassfish,gbox
httpd的特性:
高度模块化:core+modules 不会发生血崩效应
DSO:Dynamic Shared Object
MPM:Mutipath Processing Modules 多路处理模块
prefork:多进程模型。每个进程响应一个请求
一个主进程,负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求,即便没有用户请求,也会预先生成多个空闲进程(有上下限,最多1024个),随时等待请求到达
主进程(80端口)监听套接字,主进程将收到的请求分发给子进程(非80端口)
worker:多线程模型,每个线程响应一个请求。
多个主进程。每个主进程生成多个子进程,每个子进程负责生多个子线程,每个线程响应一个请求(没有请求时也会预生成多个空闲线程,一遍快速响应)
m进程,n线程,m*n
event:事件驱动模型,每个线程响应多个请求
一个主进程,生成m个子进程,每个进程处理n个请求
httpd-2.2:event为测试使用
httpd-2.4:event可生产使用
http的功能特性:
虚拟主机:
ip
端口
FQDN
CGI:Common Gateway Interface:通用网关接口 实现支持动态页面
反向代理
负载均衡
路径别名
丰富的用户认证机制
basic
digest
支持第三方模块
httpd的基本配置和应用
rpm包安装的httpd的默认工作目录(根目录):/etc/httpd
配置文件:
主配置文件:/etc/httpd/conf/httpd.conf 分段配置文件:/etc/httpd/conf.d/*.conf
服务脚本:
/etc/rc.d/init.d/httpd
脚本的配置文件:/etc/sysconfig/http
模块文件目录:
/etc/httpd/modules --> /usr/lib64/httpd/modules
主程序文件:
/usr/sbin/httpd (prefork) 默认方式 /usr/sbin/httpd.worker (worker) /usr/sbin/httpd.event (event)
日志文件
/var/log/httpd access_log:访问日志文件 error_log:包含错误及其他信息的日志文件
站点文档目录:
/var/www/html
配置文件:
Directive(指令) Value(值)
# grep "Section" httpd.conf ### Section 1: Global Environment ### Section 2: ‘Main‘ server configuration ### Section 3: Virtual Hosts “Main”server和Virtual Hosts不能同时启用,默认启用前者
指定监听地址和端口
Listen [IP:]80
持久连接:连接建立后,每个资源获取结束后不会断开连接,而继续等待其他资源请求并完成传输
断开方法:
数量限制 MaxConnetctionClients,根据通过该链路获取特定资源的次数断开
时间限制 TimeOut
缺点:对并发访问量较大的服务器,开持久连接会导致有些请求得不到服务
改进:减短,httpd-2.4支持毫秒
非持久连接:每个资源都是单独通过专用的连接进行获
[root@chanlay2 conf]# telnet 172.16.31.117 80
...
GET /fstab http/1.1
Host:172.16.31.117
响应报文元数据
fstab内容...
Connection closed by foreign host请求完毕后直接断开连接
MPM:
多路处理模块
实现方式:prefork,worker,event
http-2.2 不支持同时编译两种以上实现方式
ps -aux|grep httpd
默认为/usr/sbin/httpd,即prefork
httpd -l :查看必须的模块
httpd -M:查看所有已装载的模块
[root@chanlay2 conf]# httpd -M httpd: apr_sockaddr_info_get() failed for chanlay2 httpd: Could not reliably determine the server‘s fully qualified domain name, using 127.0.0.1 for ServerName Loaded Modules: core_module (static) ...//static表示已编译进程序的模块 auth_basic_module (shared) ...//shared表示可动态装卸载
更换支持不同MPM的主程序
编辑/etc/sysconfig/http
[root@chanlay2 conf]# cat /etc/sysconfig/httpd ... # The service must be stopped before changing this variable. # #HTTPD=/usr/sbin/httpd.worker ...//将HTTPD解注释,然后改为目的MPM,重启httpd程序即可
<IfModule prefork.c> StartServers 8 //默认启动时会启动8个空闲子进程 MinSpareServers 5 //最少空闲进程数 MaxSpareServers 20 //最多空闲进程数 ServerLimit 256 //最多启动进程数 MaxClients 256 //最多客户端并发请求连接数 MaxRequestsPerChild 4000 //每个子进程最多响应请求数 </IfModule
DSO
配置指令模块加载:
LoadModule <Module_Name> <Module_path>
模块路径,可使用相对路径
定义“Main”Server的文档页面路径
站点路径访问控制
Directory中的访问控制定义
注意:建议使用service httpd reload 重新装载配置文
httpd -t //检查配置文件是否有误
文档路径映射:
DocumentRoot指向的路径为URL起始的位置
/var/www/html/images/1.jpg
http://server/images/1.jpg
DocumentRoot指令
基于来源地址
基于帐号
<Location "URL"> ... </Location>
<Directory "/PATH/TO/SOMEDIR"> ... </Directory>
文件系统
URL路径
站点控制机制:
定义的方式有两种:
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0
IP地址
网络地址
Order allow,deny :只有明确Allow的来源地址,才允许访问,其他均为Deny Allow from all:允许访问的来源地址 Deny from:拒绝访问的来源地址
DirectoryIndex:设置默认主页,自左向右搜索到的文件作为主页
日志配置
路径别名
设定默认字符集
AddDefaultCharset UTF-8
alias /URL/ "/path/to/some_directory" 将后者临时作为根目录DocumentRoot
ErrorLog logs/error_log LogLevel warn
访问日志,要定义日志格式
bla
from后可跟上的地址格式:
每行定义一个组,格式
BASE64
<Directory "/var/www/html/stuff"> 348 options None 349 AllowOverride None 350 AuthType Basic 351 AuthName "Secret For Common Stuff" 352 AuthUserFile /etc/httpd/users/.htpasswd 353 Require user tom,jerry 354 </Directory>
提供用户的帐号文件
digest:摘要认证
应该有其名称,用于向用户通知此认证的原因等
Authorization:客户端用户填入帐号密码后再次发送请求至服务器,认证通过,则请求授权
安全域:需要用户认证后方能访问的路径
http协议支持的认证方式:
基于用户的访问控制
虚拟主机
htpasswd [ -c ] [ -m ] [ -D ] passwdfile username -c:添加第一个用户时创建此文件 -m:以md5格式加密用户密码存放 -s:以sha格式加密用户密码存放 -D:删除指定用户
Grp_Name: User1 user2
htpasswd命令用于维护此文件
组认证:
WWW-Authenticate:服务器用401状态拒绝客户端要求,说明需要用户提供用户名和密码,弹出对话框
basic:基本认证
质询:
认证:
基于IP
基于PORT
基于FQDN
<VirtualHost *:80> ServerAdmin [email protected] DocumentRoot /www/docs/dummy-host.example.com ServerName dummy-host.example.com ErrorLog logs/dummy-host.example.com-error_log CustomLog logs/dummy-host.example.com-access_log common </VirtualHost>
注意:大多数可用于全局域‘main‘server 的命令同样可用于虚拟主机
注意:额外经常用于每个虚拟主机的配置有:
Indexes:当访问的路径下无默认主页面文件,且没有指定具体要访问的资源时,会将此路径下的所有资源以列表呈现给用户,非常危险,不建议使用 FollowSymLinks:如果某页面文件是为指向DocumentRoot之外路径上的其他文件时,将直接显示目标文件的内容 有风险,同样不建议使用 None:不启用任何特性 All:所有都启用
All
None
首先将Main Server中的DocumentRoot 命令注释掉
一个物理器可服务于多个站点,每个站点可通过一个或多个虚拟主机实现
http三种类型的虚拟主机
内置的status页面
ErrorLog CustomLog <Directory> <Location> ServerAlias
Options
AllowOverride 是否读取.htaccess文件指令内容
基于来源地址访问控制
<Locatio /server-status> SetHandler server-status Order deny,allow Deny from all Allow from 172.16.0.0/16 </Location>
本文出自 “运维狗” 博客,请务必保留此出处http://yunweigou.blog.51cto.com/6299641/1652036
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。