http 协议深入介绍(一):https://developer.aliyun.com/article/1525318
九 httpd 安装
http 服务基于 C/S 结构 (客户端和服务端)
(一)常见http 服务器程序
- httpd apache,存在C10K(10K connections)问题
- nginx 解决C10K问题lighttpd
- IIS .asp 应用程序服务器
- tomcat .jsp 应用程序服务器
- jetty 开源的servlet容器,基于Java的web容器
- Resin CAUCHO公司,支持servlets和jsp的引擎
- webshpere:IBM公司
- weblogic:BEA,Oracle
- jboss:RedHat,IBM
- oc4j:Oracle
(二)apache 功能
- 提供http协议服务
- 多个虚拟主机:IP、Port、FQDN
- CGI:Common Gateway Interface,通用网关接口,支持动态程序
- 反向代理
- 负载均衡
- 路径别名
- 丰富的用户认证机制:basic,digest
- 支持第三方模块
(三)apache 特性
- 高度模块化:core + modules
- DSO:Dynamic Shared Object 动态加载/卸载
- MPM:multi-processing module 多路处理模块
(四)MPM multi-processing module 工作模式
1,prefork
多进程I/O模型,每个进程响应一个请求,CentOS 7 httpd默认模型一个主进程:生成和回收n个子进程,创建套接字,不响应请求多个子进程:工作 work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求
Prefork MPM预派生模式,有一个主控制进程,然后生成多个子进程,每个子进程有一个独立的线程响应用户请求,相对比较占用内存,但是比较稳定,可以设置最大和最小进程数,是最古老的一种模式,也是最稳定的模式,适用于访问量不是很大的场景
优点:稳定
缺点:慢,占用资源,不适用于高并发场景
2,worker
复用的多进程I/O模型,多进程多线程,IIS使用此模型
一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n
worker MPM是一种多进程和多线程混合的模型,有一个控制进程,启动多个子进程,每个子进程里面包含固定的线程,使用线程程来处理请求,当线程不够使用的时候会再启动一个新的子进程,然后在进程里面再启动线程处理请求,由于其使用了线程处理请求,因此可以承受更高的并发。
优点:相比prefork 占用的内存较少,可以同时处理更多的请求
缺点:使用keep-alive的长连接方式,某个线程会一直被占据,即使没有传输数据,也需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用。(该问题在prefork模式下,同样会发生)
生产环境不用, 线程处理完 空着 资源浪费
3,event
事件驱动模型(worker模型的变种),CentOS8 默认模型
一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n,有专门的监控线程来管理这些keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力
优点:单线程响应多请求,占据更少的内存,高并发下表现更优秀,会有一个专门的线程来管理keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放 生产环境用的最多
缺点:没有线程安全控制
4,更改 httpd 模式为 event
找到更改模式的 配置文件
(五)安装httpd
1, yum 安装
yum install httpd -y
2, 编译安装
(六)httpd 相关配置文件
1,主要配置文件
- /etc/httpd/conf/httpd.conf 主配置文件
- /etc/httpd/conf.d/*.conf 子配置文件
- /etc/httpd/conf.d/conf.modules.d/ 模块加载的配置文件
2,服务单元文件
- /usr/lib/systemd/system/httpd.service
- 配置文件:/etc/sysconfig/httpd
3,服务控制和启动
- systemctl enable|disable httpd.service
- systemctl {start|stop|restart|status|reload} httpd.service
- apachectl start|stop|restart|configtest
- service httpd start|stop|restart|configtest
4,站点网页文档根目录
/var/www/html
5,模块文件路径
- /etc/httpd/modules
- /usr/lib64/httpd/modules
6,主服务器程序文件
/usr/sbin/httpd
(七)httpd 命令
1, -v显示版本
2, -t检查语法
有一个小报错,去到主配置文件,将95行取消注释
(八)httpd 包含其他配置文件
说明:
- Include和IncludeOptional功能相同,都可以包括其它配置文件
- 但是当无匹配文件时,include会报错,IncludeOptional会忽略错误
1,include 子配置文件
2, 总目录
(九) 主页面的位置
1,为什么站点网页文档根目录/var/www/html
因为配置文件写了
2,为什么 默认去index.html这里找
因为配置文件写了
(十)监听地址
1,格式
写到配置文件中
Listen [IP:]PORT
说明:
(1) 省略IP表示为本机所有IP
(2) Listen指令至少一个,可重复出现多次
2,示例
注释掉 主配置文件 监听80这一行
手搓一个子配置文件
检查语法并重启
客户机去连 9527端口
(十一) 隐藏服务器版本信息
1,格式
语法:
ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full
相关指令:
ServerTokens Prod[uctOnly] :Server: Apache
ServerTokens Major: Server: Apache/2
ServerTokens Minor: Server: Apache/2.0
ServerTokens Min[imal]: Server: Apache/2.0.41
ServerTokens OS: Server: Apache/2.0.41 (Unix)
ServerTokens Full (or not specified): Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2 此为默认值
2,具体示例
当客户机访问服务机,能看到服务机的版本信息
服务机可以做下列配置 写到主配置文件中
检查语法 并重启
客户机看不到 服务机的版本信息了
(十二) 持久连接
1, 如果没有持久连接
100张图片 会经历700次
2,持久连接理解
持久连接解决三次握手问题
只建立一次三次握手,请求后,就不断开了
就是:
无持久连接:一次三握手 下载一个资源
有超时连接:一次三次握手 下载多个资源
3,持久连接结束方式
1,超时时间
2,下载的资源个数
4,持久连接相关指令
KeepAlive On|Off
# On 表示开启持久连接
KeepAliveTimeout 15
#连接持续15s,可以以ms为单位,默认值为5s
MaxKeepAliveRequests 500
#持久连接最大接收的请求数,默认值100,
5, 持久连接实例
服务机写到子配置文件
服务机 检查语法 并重启
客户机手搓http 请求报文
可以发现 下了两次资源断开
(十三)查看模块
1,查看静态编译的模块
2, 正在运行的模块有哪些
(十四)MPM (Multi-Processing Module)多路处理模块
httpd 支持三种MPM工作模式:prefork, worker, event 修改
1,修改event 模式
2,prefork模式相关的配置
3, worker和event 模式相关的配置
4, 示例更改预留进程
找到mpm 多路处理模块
添加以下配置
检查并重新启动
可以看到预留进程变为10个
(十五)更改默认主页面
默认主页面为 /var/www/html
因为主配置文件:
除了指定httpd 的根 还要授权
(十六) 别名 更改默认主页面
alias 替换
(十七)没有index.html 也能访问服务器
想要支持软连接:
(十八) 虚拟主机
1,三种方式
基于ip
基于端口
基于域名
2, 原理
写到子配置文件
3,基于ip地址
[root@node2 conf.d]#vim /etc/httpd/conf.d/test.conf <VirtualHost 192.168.91.101:80> ServerAdmin support@jfedu.net DocumentRoot "/var/www/html/accp" ServerName www.accp.com ErrorLog "logs/www.accp.com_error_log" CustomLog "logs/www.accp.com_access_log" common </VirtualHost> <VirtualHost 192.168.91.188:80> ServerAdmin support@jfedu.net DocumentRoot "/var/www/html/accp" ServerName www.accp.com ServerAlias www.dummy-host.example.com ErrorLog "logs/www.accp.com_error_log" CustomLog "logs/www.accp.com_access_log" common </VirtualHost> <Directory "/var/www"> AllowOverride None # Allow open access: Require all granted </Directory> [root@localhost extra]#vim /etc/httpd/conf/httpd.conf Listen 192.168.91.101:80 Listen 192.168.91.188:80
4,基于端口地址
[root@node2 conf.d]#vim /etc/httpd/conf.d/test.conf <VirtualHost 192.168.91.101:80> ServerAdmin support@jfedu.net DocumentRoot "/var/www/html/accp" ServerName www.accp.com ErrorLog "logs/www.accp.com_error_log" CustomLog "logs/www.accp.com_access_log" common </VirtualHost> <VirtualHost 192.168.91.101:8080> ServerAdmin support@jfedu.net DocumentRoot "/var/www/html/accp" ServerName www.accp.com ServerAlias www.dummy-host.example.com ErrorLog "logs/www.accp.com_error_log" CustomLog "logs/www.accp.com_access_log" common </VirtualHost> <Directory "/var/www"> AllowOverride None # Allow open access: Require all granted </Directory> [root@localhost extra]#vim /etc/httpd/conf/httpd.conf Listen 192.168.91.101:80 Listen 192.168.91.188:80
5, 基于域名
[root@node2 conf.d]#vim /etc/httpd/conf.d/test.conf <VirtualHost 192.168.91.101:80> ServerAdmin support@jfedu.net DocumentRoot "/var/www/html/kgc" ServerName www.kgc.com ErrorLog "logs/www.kgc.com_error_log" CustomLog "logs/www.kgc.com_access_log" common </VirtualHost> <VirtualHost 192.168.91.101:80> ServerAdmin support@jfedu.net DocumentRoot "/var/www/html/accp" ServerName www.accp.com ServerAlias www.dummy-host.example.com ErrorLog "logs/www.accp.com_error_log" CustomLog "logs/www.accp.com_access_log" common </VirtualHost> <Directory "/var/www"> AllowOverride None # Allow open access: Require all granted </Directory> mkdir -p /var/www/html/kgc mkdir -p /var/www/html/accp echo "<h1>www.kgc.com</h1>" /var/www/html/kgc/index.html echo "<h1>www.accp.com</h1>" /var/www/html/accp/index.html 去添加host文件
(十九) 黑名单 白名单
7-2 可以访问
真机禁止