JavaEE--------Apache WEB服务器

目录

一. Apache和Tomcat的区别

二. Apache 的体系结构

2.1 Apache的目录结构 (httpd2.0为例)

2.2 Apache 层次结构

2.3 Apache 的核心组件

2.4 Apache运行流程

三. Apache的下载安装


一. Apache和Tomcat的区别

平常使用 apache的tomcat来发布tomcat服务器端的文件,其实还有个apache服务器。看了些资料,才得知他们有以下区别:

apache是web服务器,tomcat是应用(Java)服务器,它只是一个servlet (jsp也翻译成servlet) 容器,可以认为是apache的扩展。

apache和tomcat都可以做为独立的web服务器来运行。但是apache不能解释Java程序(jsp,serverlet)

Apache是普通服务器,本身只支持html即普通网页。不过可以通过插件支持PHP,还可以与Tomcat连通(单向Apache连接Tomcat,就是说通过Apache可以访问Tomcat资源。反之不然)。两者都是一种容器,只不过发布的东西不同。apache是html容器,功能像IIS一样,tomcat是jsp/servlet容器,用于发布JSP及JAVA的,类似的有IBM的webshere、EBA的Weblogic,sun的JRun等
apache和tomcat是独立的,在同一台服务器上可以集成。

打个比方:apache是一辆卡车,上面可以装一些东西如html等。但是不能装水,要装水必须要有容器(桶),tomcat就是一个桶(装像Java这样的水),而这个桶也可以不放在卡车上。

二. Apache 的体系结构

Apache采用模块化的体系结构,它的大部分功能都被分割成相互独立的模块,这样的结构可以通过增加和删除模块就可以扩展和修改Apache提供的功能,另一方面,对于Apache 功能的理解也变得非常容易。

2.1 Apache的目录结构 (httpd2.0为例)

httpd源代码文件有2000个,包括180多个目录
httpd2.0
----server :此目录是整个Apache核心功能实现,包括请求处理、协议处理等,此目录下面还包括多线程处理模块(mpm),主要是用来实现多线程并发的。
----modules:包括Apache所有的模块,而且一个模块占用一个目录  mod_ssl  mod_proxy mod_perl
----include:Apache必需的头文件,包括一些极其重要的头文件 http_main.h   http_protocol.h http_request.h 等
----os :操作系统平台依赖文件
----srclib:Apache开发和运行需要的基础库,主要包括 apr_util  apr 和 pcre
----support:用于辅助Apache的小工具 tools

----test:APR的测试函数

2.2 Apache 层次结构

Apache 可以分为5层,分别是 操作系统平台功能层,可移植运行库层(操作系统适配层),Apache核心功能层,Apache可选功能层和Apache第三方功能库
(1) 操作系统平台功能层:
Apache实质上还是运行在操作系统上面的应用程序,因此必须使用操作系统本身提供的底层功能,比如进程和线程、进程和线程的通信,网络套接字通信和文件操作等
同时Apache也是跨平台(可以在不同的操作系统上运行)
(2) 可移植运行库(APR)

APR(Apache portable runtime) 是操作系统的适配层,通过APR也实现了Apache的跨平台。因为不同的操作系统提供的底层API不同,也就是实现同一个操作所用的函数方法不同,这时在Apache和操作系统中间设计一个APR,这样APR根据不同的操作系统分别实现一个相同的功能,这样apache可以调用APR的提供的一个API接口。

这样,如果Apache要创建一个进程,这时会调用 APR中的 apr_proc_create()函数,此时APR会自动识别操作系统的类型根据不同的类型调用操作系统通过的API,如是Unix系列则会调用unix中的fork()方法实现创建进程;如果是windows系统,则调用createProcess()创建进程。

所以,Apache在处理与操作系统有关的事物时,不用考虑是基于哪一个操作系统,直接用APR的统一API接口就可,具体的由APR来实现跨操作系统。
实际上任何应用程序都可以借助APR进行跨平台。
(3) 核心功能层
a) 核心功能层主要实现Apache的基本功能和核心功能,包括读取和响应HTTP请求,处理HTTP协议;核心功能层包括核心程序和核心模块
核心程序主要是实现Apache的基本功能:
启动和终止apache
处理配置文件(config.c)
接受和处理HTTP连接
读取HTTP请求并对该请求进行处理
处理HTTP协议
核心功能层另一个是 核心模块,apache的大部分模块是可选择的,可以有也可以没有,但是有两个模块是必须的,即:mod_core和 mod_so
mod_core:负责处理配置文件中的大部分配置指令,并根据这些指令运行apache
mod_so:负责在需要的时候动态加载其余模块,缺少了该模块其他模块无法加载
多进程并发处理模块MPM(这里理解一个client请求成功并建立一个TCP连接,则这是一个进程),MPM虽然hi可以选择的,但是现在apache必须要用到多进程并发,所以这个模块也是必须的模块
 b) Apache 最基本的核心功能由apache 核心完成,除此之外,核心无法提供的功能则全部由模块提供。为了允许这些模块能完成控制apache的处理,apache核心程序提供了对应的API;这些API是指每个模块中包含的一系列的函数(核心程序处理HTTP请求的时候用来将信息传递给模块),以及一些列apr的函数。
(4) 可选功能层
Apache有很多模块,包括mod_ssl mod_proxy mod_perl ;apache的文件都是C语言开发的,如果有perl脚本写的模块,必须把mod_perl 模块加载,否则不能运行
(5) 第三方支持库
apahe的一些模块会使用到第三方的开发库,比如 mod_ssl 使用了 openssl;mod_perl 使用了perl 开发库,这些库并不属于apache,是第三方库。

2.3 Apache 的核心组件

Apache的核心组件包括 配置文件组件(http_config)、进程并发组件(MPM)、连接处理组件(http_connection)、HTTP协议处理组件(http_protocol)、HTTP请求处理组件(http_request)、HTTP核心组件(http_core)、核心模块组件(mod_core) 共七部分。七大组件直接很多都是相互调用的关系,比如MPM与HTTP_core相互调用,但是http_config

是单向调用其他几个组件,然后 main()函数调用http_config组件。除了上述说的七个核心组件还有日志处理组件、虚拟主机处理组件,以及过滤模块组件。

(1) main.c

Apache是用C语言开发的,main.c是所有程序的入口,main()函数也包括很多处理操作,包括配置文件、虚拟主机配置等,还有一个处理并发的主循环,在主循环中Apache所做的事情就是执行MPM模块,MPM将产生多个进程或多个线程来Listen 指定端口(80 443),并处理该端口上的连接和请求。具体代码如下:

for(;;)  
{  
     ....  
     if(ap_mpm_run())  
        break;  
     ....  
}  

(2) HTTP请求处理组件
子请求:在并发量比较高的网站,对一个特定的请求,为了加快处理速度,会从当前请求中派生出多个子请求,由这些子请求去并发地处理,(比如:mod_autoindex 模块进行索引的时候会针对目录中的每一个文件产生一个子请求);当子请求处理完毕后再返回到父请求中。

重定向请求:apache处理请求时,当前的请求可能会被重定向(访问一个网页会先跳转到登录页面),重定向时当前定向会产生新的请求,由新请求继续处理。

2.4 Apache运行流程

(1) Apache启动过程

apache的启动包括两个阶段,高权限启动阶段和低权限运行阶段,通常称之为两阶段启动方式。

apache中的绝大部分内存都是基于内存池分配的,在apache启动时必须首先初始化内存池资源;然后apache会读取和解析apache的配置文件(httpd.conf) ;在启动的最后阶段,apache将通过调用ap_mpm_run函数并将控制权交给MPM,只有当MPM执行失败或结束后才把控制权交还给主程序,而且MPM在处理HTTP连接时用的权限是普通用户的权限,这样会避免黑客攻击apache会获取root权限。
MPM有两种并发方式:prefork  worker,其中 prefork是以进程为基本单位,每一个请求可能会产生多个进程,这样如果在window系统中,一个进程占的资源比较大,这样apache负载的并发就比较小;所以在Linux系统中是prefork模式,在window系统中一般采用 worker模式。
(2) Apache 链接处理
在收到client端的HTTP请求并建立socket连接后,apache就获取了client对应的IP,通过这个IP可以确定该IP地址对应的虚拟主机族(?),让回更新相关的虚拟主机的相关信息。
一旦client与Apache建立连接,请求数据将被读取出来,然后HTTP_PROTOCOL 模块将开始对该报文进行解析,请求的解析包括:
HTTP请求头:  GET index.html  HTTP/1.1
HTTP请求域:  Accept:*/*
HTTP请求体:对一些特殊的请求,比如POST 会在报文中保存数据
读取的请求信息会保存在数据结构 request_rec 中。
(3) 请求处理
对于HTTP报文,Apache调用ap_process_request 函数对请求进行实质处理,Apache中请求处理包括三个阶段:请求解析阶段、安全处理阶段、请求准备阶段,而每一个阶段也可以细分多个子阶段
请求解析阶段:
a) URL字符转义
通常情况下,浏览器会自动转换请求地址栏中一些特殊字符,比如空格(%20),而对服务器而言,它就要将%xx 格式的字符串重新还原成原来的字符串
b) 优化 URL :有时URL中包括一下多余的/    http://www.baidu.com/...//   这样把多余的/ 给删除,把相对路径的 ../   ./ 都换成绝对路径
c) URL名称转换:如果在apache上面有alias,如果URL是一个别名就把它转换为真实的域名 URL
d) URL重定向:如果apache里面有配置文件 rewrite 设置,则把请求的URL进行重定向到新的 URL
安全处理:
就是前面说的 AAA认证,不过这里是具体实现(挂钩对应的模块进行访问控制、身份认证、用户授权)
请求准备阶段:
a) type_checker:apache在处理客户请求的资源前,先要确定用户请求资源的类型(html txt gif ),然后再进行内容生成
b) fixups:补丁修复,apache开发需要近现代其他优化操作可以在这里实现
(4) 内容生成

请求处理最重要的内容就是响应内容生成,对于静态的HTML文件直接读取文件返回给客户端就可以了;对对一些脚本CGI、js还有一下动态数据库文件,需要apache调用对应的处理器生成客户请求的内容;生成内容会进入过滤器进行内容过滤(自己设置过滤的内容和规则),通过最后一个过滤器(网络过滤器后),把内容发送到网络,最后传输到客户端,并在浏览器中显示。

三. Apache的下载安装

如何从Apache官网下载windows版apache服务器?

下载软件最好从官网下载,摸索了好久终于摸清楚怎么从Apache官网下载windows安装版的Apache服务器了。

步骤:
1. 进入apache服务器官网http://httpd.apache.org/,这里我们以下载稳定版的

httpd 2.2.29为例,点击download。

2. 由于官方网页改版,以前的方式可能五法进行下载,为了不浪费大家的时间,特此修正2017-09-22

第一步点击左边download链接

3.  点击链接 a number of third party vendors

后面的步骤就和之前的一致了

4. The Apache HTTP Server Project itself does not provide binary releases of software, only source code. Individual committers may provide binary packages as a convenience, but it is not a release deliverable.
If you cannot compile the Apache HTTP Server yourself, you can obtain a binary package from numerous binary distributions available on the Internet.
大致意思是说apache本身不提供已编译的安装包,只提供源码,如果你自己无法编译,可以选择下面这些官方推荐的第三方提供编译的网站。

其中后两个是有名的wamp以及xampp集成环境,如果只想下载apache可以选择前三个网站,这里我们第一个ApacheHaus为例。

5. 打开ApacheHaus之后你会发现这个网站上有各种windows版本,可以尽情选择你要下载的版本。

6. 点击红框中的图标即可开始下载,x86是32位的,x64是64位的,根据自己的操作系统选择下载

7. 解压后是一个压缩包,把他移动到你想放置的地方。

8. 命令行下进入到apache下面的bin目录,输入
httpd -k install

把apache安装成windows后台服务。

9. 利用ApacheMonitor来启动你的apache
The Apache Monitor is a desktop tray application that allows you to monitor the existence of a running Apache service and easily start, stop and restart Apache. To use it just double click on the ApacheMonitor.exe in the \Apache24\bin folder. If you want it to start automatically for you when you log into the computer, just drag a copy into the Startup folder in Window's Start Menu.
Apache监控器是一个允许你用来监控正在运行的Apache服务的软件,并且让你启动、停止和重启Apache变得更容易。只需要双击\Apache24\bin目录下的

ApacheMonitor.exe就可以运行该程序,如果你想开机自动启动该软件,把该软件拉倒开始菜单里的Startup folder即可

10. 更多操作请参考附带的说明文档readme_first.html。

11. 针对大家遇到的一些问题做下简单总结 :
1) 由于apache默认是监听80端口,如果你的电脑iis是启动状态,并且也使用了80端口,apache将无法正常启动,需要先停止iis,另外迅雷也可能会使用80端口,所以也要关闭迅雷。查看80端口是否被占用,命令行下输入:
netstat -aon|findstr "80"
如果看到如图的结果,说明80端口已被使用,需要先关闭相关软件,或者修改apache默认的监听端口
打开apache目录下的conf/httpd.conf  搜索   "Listen 80"
修改为Listen 8088

保存之后再重新启动apache

2) httpd -k install 输入该命令后查看服务是否安装成功
开始-->运行-->services.msc-->确定

打开后如果在服务列表能够看到apache字样,说明,服务安装成功,可以直接点击左边的启动按钮来启动服务

3) 服务无法正常安装,首先确定软件32位和64位是否和自己的系统匹配
其次,看电脑有没有安装软件相应的运行包,比如你下载的是VC9版本,那么你需要先安装Microsoft Visual C++ 2008 Redistributable ,同理VC11版本你需要安装Microsoft Visual C++ 2012 Update 4 Redistributable Package (X86 & x64)
在ApacheHaus网站的最底部提供了相应的Visual Studio Redistributable Packages下载链接
 

 

---------------------------------------------------------------------我是低调的分隔线------------------------------------------------------------------------- 

                     

                                                                                                            吾欲之南海,一瓶一钵足矣...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值