Apache知识点

回复 收藏
本帖最后由 孔雀东南飞 于 2016-2-16 21:29 编辑



说明:这部分只是一些知识点,不包含apache的配置,希望对您有所帮助
Apache简介
Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。
Apache取自“a patchy server”的读音,意思是充满补丁的服务器,因为它是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。
Apache HTTP服务器是一个模块化的服务器。
Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适合于多处理器环境,因此,在一个Apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。

Apache的模块
Apache是模块化的服务器,这意味着核心中只包含实现最基本功能的模块。扩展功能可以作为模块动态加载。默认情况下,只有base组的模块被编译进了服务器。
常见的模块有:并发限制模块、日志监控模块、负载均衡模块、图像处理模块、压缩模块、音乐模块、带宽限制模块等等
MPM(Multi -Processing Modules,多路处理模块),经过适当的配置,可以提高服务器的负载能力。原理是通过增加服务进程数量使服务器可以同时处理更多用户请求。
静态加载模块和动态共享模块的区别
静态,顾名思义就是apache本身不用干什么,不用动就可以使用模块。这就需要把模块都编译进apache的httpd文件中。

动态,需要apache去调用这个模块,用哪个调用哪个,这种方式的前提是,需要告诉apache这些模块在哪里。

Apache的工作模式
Apache工作模式有许多种,目前主要有两种:prefork模式和worker模式
prefork
prefork是Unix平台上的默认(缺省)MPM,使用多个子进程,每个子进程只有一个线程,是一个非线程的,预派生的模块,这意味着prefork会使用多个子进程,每个子进程只有一个线程来接受请求;每个进程只能处理一个http链接,直到这个链接被释放;每个进程在某个确定的时间只能维持一个连接,效率高,但内存占用量比较大。
原理:一个单独的控制进程(父进程)负责产生子进程,这些子进程用于监听请求并作出应答。Apache总是试图保持一些备用的或者是空闲的子进程用于迎接即将到来的请求。这样客户端就不需要在得到服务前等候子进程的产生。
worker
worker使用多个子进程,每个子进程有多个线程,每个线程在某个确定的时间只能维持一个连接,内存占用量比较小,适合高流量的http服务器。缺点是假如一个线程崩溃,整个进程就会连同其任何线程一起”死掉”,所以要保证一个程式在运行时必须被系统识别为”每个线程都是安全的”。
worker使网络服务器支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。
preforkworker模式的比较
prefork模式使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。在大多数平台上,Prefork MPM在效率上要比Worker MPM要高,但是内存使用大得多。prefork的无线程设计在某些情况下将比worker更有优势:它可以使用那些没有处理好线程安全的第三方模块,并且对于那些线程调试困难的平台而言,它也更容易调试一些。

worker模式使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说,在一个高流量的HTTP服务器上,Worker MPM是个比较好的选择,因为Worker MPM的内存使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,如果一个线程崩溃,整个进程就会连同其所有线程一起"死掉"。由于线程共享内存空间,所以一个程序在运行时必须被系统识别为"每个线程都是安全的"。

总的来说,prefork方式速度要稍高于worker,然而它需要的cpu和memory资源也稍多于worker。

Apache的安装方式
Apache的安装有两种方式:源码包安装和二进制包安装。这两种方式各有特色,二位制包安装不需编译,针对不同的平台有经过优化编译的不同的二进制文件以及包格式,安装简单方便,源码包则必须先配置编译再安装.Apache的目录结构

Apache的目录结构
1.源码包方式安装的目录结构
1.png
icons            #Apache图标文件
modules       #动态加载模块文件         
lib                 #库文件
logs              #日志文件               
conf             #主配置文件
conf/extra    #扩展及模块配置文件
error            #默认错误应答文件
manual         #Apache文档            
include         #包含头文件
htdocs         #默认WEB文档根目录      
cgi-bin         #默认cgi文件
man            #man帮助文件
2.二进制包方式安装目录结构
/etc/httpd/conf                        #主配置文件(主配置文件对整个服务器都有效)
/etc/httpd/conf.d                     #扩展及模块配置文件目录                  
/etc/logrotate.d/httpd             #日专轮循设置文件           
/etc/rc.d/init.d/httpd               #服务控制脚本            
/etc/sysconfig/httpd                #服务控制脚本附加参数设置文件           
/usr/bin                                    #Apache二进制软件目录           
/usr/sbin/                                 #Apache服务程序目录            
/usr/share/doc/httpd-*            #Apache文档目录           
/usr/share/man/                      #ApacheMan文档目录           
/var/www/cgi-bin                    #默认CGI文件目录         
/var/www/error                       #默认错误应答文件目录           
/var/www/html                        #默认WEB文档根目录           
/var/www/icons                       #Apache图标文件目录
/etc/httpd/logs           链接到/var/log/httpd                     #日志文件目录        
/etc/httpd/modules    链接到/usr/lib/httpd/modules    #动态加载模块目录     
/etc/httpd/run           链接到/var/run                              #PID及锁文件目录

Apache的状态码
"100" : Continue 客户必须继续发出请求
"101" : witching Protocols 客户要求服务器根据请求转换HTTP协议版本 
"200" : OK 交易成功
"201" : Created 提示知道新文件的URL
"202" : Accepted 接受和处理、但处理未完成
"203" : Non-Authoritative Information 返回信息不确定或不完整
"204" : No Content 请求收到,但返回信息为空
"205" : Reset Content 服务器完成了请求,用户代理必须复位当前已经浏览过的文件
"206" : Partial Content 服务器已经完成了部分用户的GET请求
"300" : Multiple Choices 请求的资源可在多处得到
"301" : Moved permanently 删除请求数据
"302" : Found 在其他地址发现了请求数据
"303" : See Other 建议客户访问其他URL或访问方式
"304" : Not Modified 客户端已经执行了GET,但文件未变化
"305" : Use Proxy 请求的资源必须从服务器指定的地址得到
"306" 前一版本HTTP中使用的代码,现行版本中不再使用
"307" : Temporary Redirect 申明请求的资源临时性删除
"400" : Bad Request 错误请求,如语法错误
"401" : Unauthorized 请求授权失败
"402" : Payment Required 保留有效ChargeTo头响应
"403" : Forbidden 请求不答应
"404" : Not Found 没有发现文件、查询或URl
"405" : Method Not Allowed 用户在Request-Line字段定义的方法不答应
"406" : Not Acceptable 根据用户发送的Accept拖,请求资源不可访问
"407" : Proxy Authentication Required 类似401,用户必须首先在代理服务器上得到授权
"408" : Request Time-out 客户端没有在用户指定的饿时间内完成请求
"409" : Conflict 对当前资源状态,请求不能完成
"410" : Gone 服务器上不再有此资源且无进一步的参考地址
"411" : Length Required 服务器拒绝用户定义的Content-Length属性请求
"412" : precondition Failed 一个或多个请求头字段在当前请求中错误  "413": Request Entity Too Large 请求的资源大于服务器答应的大小 
"414" : Request-URI Too Large 请求的资源URL长于服务器答应的长度
"415" : unsupported Media Type 请求资源不支持请求项目格式 
"416" : Requested range not satisfiable请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
"417" : Expectation Failed 服务器不满足请求Expect头字段指定的期望值,假如是代理服务器,
"500" : Internal Server Error服务器产生内部错误(一般是php的脚本程序出错)
"501" : Not Implemented 服务器不支持请求的函数
"502" : Bad Gateway 服务器暂时不可用,有时是为了防止发生系统过载
"503" : Service Unavailable 服务器过载或暂停维修
"504" : Gateway Time-out 关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长

"505" : HTTP Version not supported 服务器不支持或拒绝支请求头中指定的HTTP版本

Apache.htaccess文件
Apache可以使用分布在整个网站文件目录树结构中的特殊文件来进行分散配置,这些特殊的文件通常叫.htaccess ,但是也可以用AccessFileName指令来改变它的名字。
.htaccess文件中指令的作用域是存放它的那个目录及其所有子目录。
.htaccess文件的语法与主配置文件相同。

由于对每次请求都会读取.htaccess文件,所以对这些文件的修改会立即生效。服务器管理员可以在主配置文件中使用AllowOverride指令来决定哪些指令可以在.htaccess文件中生效。

Apache的日志
Apache内建了记录服务器活动的功能,这就是它的日志功能。

如果Apache的安装方式是默认安装,服务器一运行就会有两个日志文件生成。这两个文件是access_log和error_log。采用默认安装方式时,这些文件可以在/usr/local/apache/logs下找到





2016-02-16 21:26 举报
已邀请:
0

xteplinux

赞同来自:

学习了
0

wxhwxhn

赞同来自:

很详细,学习了

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: