热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

初步学习了解Apache:基础介绍和配置

初步学习了解Apache:基础介绍和配置--Linux企业应用-Linux服务器应用信息,下面是详情阅读。
Apache介绍


(一)

一 序言

-------

我想linux爱好者没有不知道Apache的. 作为一个linux的管理员更应该精通Apache的配制. 在这里我就我的理解描述一下Apache. 作为一个被广泛使用的Web服务器, Apache将reliable摆在了第一位, performance只是第二位的东东. 这一理念我觉得很好. 当然, 它最好的地方是开放源码, 这才使我们有机会深入了解世界上最流行的Web Server.


二 基本结构介绍

---------------

Apache是由模块组成, 其中http_core.c是最根本的, 一个最小的Apache编译只包含这一个模块. 你可以用"httpd -l" 可以列出Apache被编译进了哪些模块. 动态模块是需要在配制文件中定义的. 在Redhat中, 只有"http_core.c"被编译进去了, 其余的都被编译成了so. 可以被Apache动态加载. Redhat中的Apache是比较特殊的, 标准的Apache只有一个配制文件httpd.conf, 其他的文件都是空的.


下面是在配制文件中装载模块的命令:


LoadModule digest_module modules/mod_digest.so

LoadModule proxy_module modules/libproxy.so

LoadModule php3_module modules/libphp3.so

... ...

ClearModuleList

AddModule mod_actions.c

AddModule mod_userdir.c

AddModule mod_alias.c

... ...


LoadModule是用于动态加载模块的. ClearModuleList是删除Apache中的模块列表. AddModule是将模块加入到列表中去. 上面命令是用于重新构造模块列表, 模块在列表中的顺序代表了其处理时的优先级, 后面的优先级高.


Apache将一个Clinet的请求按以下步骤处理:


1. URL -> Filename translation

2. Auth ID checking

3. Auth access checking

4. Access checking other than auth

5. Determining MIME type of the object requested

6. Fixups

7. Actually sending a response back to the client

8. Logging the request


Apache本身只负责内存分配, IO, 进程管理和模块管理等, 它通过调用模块提供的接口函数完成配制命令的处理和用户请求的实际处理. 其中的核心模块http_core.c提供了最基本的命令, 每一个模块通常都会有自己的配制命令. 模块可以参与上述的八个步骤. 每一个模块提供一个struct module, 其中定义了大量的函数指针和结构指针, 通过struct module告诉Apache该模块所支持的命令和参与的步骤.


struct module中定义了改模块的名字, 这是通过宏来完成的, 其名字就是__FILE__. 所以在文件mod_foo.c中定义的模块名字就叫mod_foo.c.


Apache内部维护了一个链表(头指针为top_module). 最初时只有一个

http_core.c. 每一条命令LoadModule, AddModule. 都会在表头加一项. 而在每一步, Apache都会按照链表中的顺序来依次调用每个模块提供的函数. 而在许多步, Apache碰到第一个返回OK的即结束. 因此, 表中的顺序( 这也就是所谓的优先级了 )可以对系统有很大影响.


下面看一下上面说过的八个步骤:


1. URL -> Filename translation

将URL转换为本地的文件名, 例如: mod_alias.c会在这一步处理alais


2. Auth ID checking

3. Auth access checking

4. Access checking other than auth

进行认证处理


5. Determining MIME type of the object requested

决定被请求对象的MIME类型


6. Fixups

不知道(谁知道请告诉我)


7. Actually sending a response back to the client

将应答发送给客户


8. Logging the request

写log


认证的部分会在后面讲. 我们看一看最后几步. Apache继承了通过扩展名来判断MIME类型的方法. AddType用来加入新的一些扩展名:


AddType application/x-httpd-php3 .php3

AddType application/x-tar .tgz


这两条指令定义了后缀为php3和tgz的文件的MIME类型. 这里用的都是标准的MIME类型, 所谓的决定MIME类型其实还包括了另一种情况: 模块会用一些字符串来描述一个请求, Apache根据这一字符串来选择一个相应的模块来处理该请求. 这些字符串都是内部自定义的. 细节会在下面描述.


AddHandler cgi-script .cgi

AddHandler server-parsed .shtml


Sethandler cgi-script


AddHandler定义了何种扩展名用那一个字符串进行描述.

SetHandler将一个目录下的文件都指定用这一个字符串描述.


我在这里提到的命令都是与其结构密切相关的. Handler和Type的关系在下面会描述的. 许多的东东从外面是看不清楚的, 下面, 我们从里面看.


三 程序的基本结构

-----------------

Apache有非常好的跨平台性. 为了实现这一目标和简化模块编写者的负担,Apache完成了许多基本的功能如IO, 内存分配等, 这些接口都是与具体平台无关的. 还有一些很有用的例程如: hash table, array 等. 在整个体系中, Apache有一个基本点, 它尽可能的使用简单的结构和算法, 这不仅易于理解和维护, 还提高了它的稳定性.


在UNIX系统上, Apache采用了多进程模型, 在Window上采用了多线程模型.多进程模型中, 其子进程处理客户请求, 父进程用于管理子进程. 当系统过载时父进程会再启动几个子进程, 当系统空闲时, 父进程会杀掉几个子进程. 子进程的数目在"MinSpareServers"和"MaxSpareServers"之间. 而且, 每个子进程处理的请求个数也是有限制的, 这可以解决诸如内存泄漏等问题. 所有的进程状态都被记录在share memory中. 由于每个进程的状态记录在其中的一小块内存上, 它通常也只读写这一块内存, 因此, Apache没有使用什么同步机制.


在Richard Steve的书上说到的几种多进程服务器模型, Apache都使用了,在不同的系统上根据其特点选择使用不同的方法:


1. accept :

在accept处阻塞, 只有在accept是在内核级实现的才行.

2. select :

在select处阻塞.

3. mutex/lock_file :

使用mutex或lock_file来进行对accpet进行互斥.


三种方法都要求进行阻塞, 区别在于阻塞与不同的地方. 前两种方法都会由所谓的巨群问题: 多个阻塞在同一个资源上的进程被同时唤醒引发再次竞争. 不过, 按Richard Steve 的评测, 第一种方法最快, 第二种其次, 第三种最慢. 其实, 在linux上第三种方法也会有巨群问题.


Apache虽然并不强调性能, 这并不意味着他们不重视性能. 而是Apache认为在Server端realiable才是第一位的. 但Apache的性能还是不错的.
推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
author-avatar
经典黑丝的诱惑
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有