- 传输层:提供进程地址
- tcp:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路
0-65535 - udp:User Datagram Protocol ,无连接协议;
0-65535 - Port number:
- tcp:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路
- 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可生产使用
- prefork:多进程模型。每个进程响应一个请求
-
- 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支持毫秒
- 断开方法:
- 非持久连接:每个资源都是单独通过专用的连接进行获
- [[email protected] conf]# telnet 172.16.31.117 80
...
GET /fstab http/1.1
Host:172.16.31.117
响应报文元数据
fstab内容...
Connection closed by foreign host请求完毕后直接断开连接
- [[email protected] conf]# telnet 172.16.31.117 80
- MPM:
- 多路处理模块
- 实现方式:prefork,worker,event
- http-2.2 不支持同时编译两种以上实现方式
-
ps -aux|grep httpd
-
- 默认为/usr/sbin/httpd,即prefork
- httpd -l :查看必须的模块
- httpd -M:查看所有已装载的模块
-
[[email protected] 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
-
[[email protected] conf]# cat /etc/sysconfig/httpd ... # The service must be stopped before changing this variable. # #HTTPD=/usr/sbin/httpd.worker ...//将HTTPD解注释,然后改为目的MPM,重启httpd程序即可
-
- 编辑/etc/sysconfig/http
-
<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>
时间: 2024-10-20 15:32:01