简单介绍
Apache的三种工作模式
1、Prefork MPM
多进程
Prefork MPM:实现了一个非线程的、预派生的web服务器。它在Apache启动之初,就先预派生一些子进程,然后等待连接;可以减少频繁创建和销毁进程的开销,每个子进程只有一个线程,在一个时间点内,只能处理一个请求。
优点:这是一个成熟稳定,可以兼容新老模块,也不需要担心线程安全问题
缺点:但是一个进程相对占用资源,消耗大量内存,不擅长处理高并发的场景
2、Worker MPM
多进程+多线程
Worker MPM和prefork模式相比:worker使用了多进程和多线程的混合模式,worker模式也同样会先预派生一些子进程,然后每个子进程创建一些线程,同时包括一个监听线程,每个请求过来会被分配到一个线程来服务。
优点:线程比起进程会更轻量,因为线程是通过共享父进程的内存空间,因此,内存的占用会减少一些,在高并发的场景下会比prefork有更多可用的线程,表现会更优秀一些
缺点:如果一个线程出现了问题也会导致同一进程下的线程出现问题,如果是多个线程出现问题,也只是影响Apache的一部分,而不是全部。由于用到多进程多线程,需要考虑到线程的安全了,在使用keep-alive长连接的时候,某个线程会一直被占用,即使中间没有请求,需要等待到超时才会被释放(该问题在prefork模式下也存在)
3、Event MPM
多进程+多线程+epoll
这是Apache最新的工作模式,它和worker模式很像,不同的是在于它解决了keep-alive长连接的时候占用线程资源被浪费的问题,在event工作模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务器的线程,执行完毕后,又允许它释放。这增强了在高并发场景下的请求处理
总的来说 :不同模式效率不同,主要用于调优;命令“ httpd -v | grep "Server MPM" ”查看当前使模式
后缀不同(开发语言不同)
静态页面一般以 .html/.htm/.xml
开发在写完页面之后,所写的页面需要部署到服务器上的,在部署页面之前需要在服务器上安装能够解析静态页面的服务(nginx httpd这两类web服务默认只能解析静态页面)静态页面的内容是固定的,动态页面的内容会因用户、浏览器、时间、地点等而发生变化
动态页面一般以 .php/.asp/jsp/.pl/.py/.cgi 等为后缀
动态页面也需要在服务器上部署能够解析动态页面的服务(nginx httpd),还要安装能够解析php页面php服务
Url和uri它俩之间很相似
Url比uri能够更精确的定位到资源,资源位置是绝对路径, uri的资源位置可以是相对路径 url=https://www.aaa.com(域名)/
主要目录和文件 | |
服务目录 | /usr/local/httpd/ |
主配置文件 | /usr/local/httpd/conf/httpd.conf |
网页目录 | /usr/local/httpd/htdocs/ |
服务脚本 | /usr/local/httpd/bin/apachectl |
执行程序 | /usr/local/httpd/bin/httpd |
访问日志 | /usr/local/httpd/log/access_log |
错误日志 | /usr/local/httpd/log/error_log |
http状态返回状态码 | ||
状态码首位 | 范围 | 分类 |
1xx | 100-101 | 信息提示 |
2xx | 200-226 | 成功 |
3xx | 300-308 | 重定向 |
4xx | 400-499 | 客户端错误 |
5xx | 500-599 | 服务器错误 |
常见的状态返回码 | |
101 | 切换协议 |
200 | 成功 |
202 | 以接受请求,但处理未完成 |
301 | 请求的页面永久跳转 |
302 | 临时跳转 |
403 | 禁止访问该页面 |
404 | 找不到页面 |
500 | 服务器内部错误 |
502 | 网关错误 |
503 | 当前服务不可用 |
504 | 网关请求超时 |
511 |
需要网络授权 |
520 | 未知错误 |
一、Apache的安装
cat /usr/local/httpd/build/config.nice 查看模块配置
Apache: /usr/local/httpd/conf/httpd.conf 这个配置文件是httpd的主配置文件
1.上传 httpd-2.2.17 软件包
[root@C7--01 ~]# rz -E
rz waiting to receive.
2.解压
[root@C7--01 ~]# tar xf httpd-2.2.17.tar.gz -C /usr/src/
[root@C7--01 ~]# cd /usr/src/httpd-2.2.17/ #进入目录
[root@C7--01 httpd-2.2.17]#
3.开启相应的模块
安装方式一:
[root@C7--01 httpd-2.2.17]# ./configure --prefix=/usr/local/httpd --enable-cgi --enable-rewrite --enable-so --enable-deflate --enable-expires
--enable-deflate:启用压缩模块;先压缩网页,在发送给客户端传输速度快
--enable-expires:缓存;有本地缓存使用缓存,没有缓存在从服务器拿数据
在配置模块时发现报错:checking for zlib location... not found 检查不到zlib软件
那我们就安装zlib
[root@C7--01 httpd-2.2.17]# yum -y install zlib
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
软件包 zlib-1.2.7-17.el7.x86_64 已安装并且是最新版本
无须任何处理
但是发现我们已经安装了zlib软件那我们在apr后面加-devel在安装一次
[root@C7--01 httpd-2.2.17]# yum -y install zlib-devel
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
---> 软件包 zlib-devel.x86_64.0.1.2.7-17.el7 将被 安装
--> 解决依赖关系完成
............
......
..
完毕!
-----如果不是以上报错那么可能是以下的依赖包没有安装
yum -y install pcre-devel apr-devel libdb-devel cyrus-sasl-devel openldap-devel expat-devel apr-util-devel gcc