apache(httpd服务器)私人学习笔记
此笔记主要是apache-httpd-2.4.23版本的笔记,并且笔记都是博主自己一字一字编写和记录,有错误的地方欢迎大家指正。
一、基本概念:
1、apahce-httpd 是apache组织开发的http服务器,原名为apache server,是apache组织的第一个产品。
2、apahce服务器与tomcat服务器是有区别的:
apache不能解析jsp页面和执行java文件,只能处理http的文件请求(js、css、html、img)等,但处理速度和性能非常快。
tomcat可以解析jsp和执行java文件,并且可以处理http的文件请求,但是性能不如apahce快。
故通常都是使用apache+tomcat配合使用,所有请求都由apahce进行转发或处理,jsp和servlet请求转发给tomcat处理,
其余的则由apache自行处理。
3、关于集群。通常是 一台apache服务器 + 多台tomcat服务器进行集群的,有三种集群方式:mod_jk、ajp_proxy和http_proxy,
其中使用最多的是mod_jk方式来整合apache与tomcat服务器。如果想对apache服务器实现集群,即使用多台apahce服务器,
可以借助Linux-HA项目Heartbeat高可用集群系统来实现apache的多机整合,也可以使用Keepalived来实现apache集群。
二、配置信息:
1、目录下的httpd-2.4.23.tar.gz 是linux系统专用的apache server,并且还没有进行编译,需要通过make命令进行编译C语言的文件。
注意 httpd-2.4.23 是 httpd-2.4.23.tar.gz 的解压文件而已。
2、编译httpd的步骤:
步骤一:httpd依赖于其他库,具体在compile-depend目录下的三个压缩包,需要进行解压和编译。
(1)apr-1.5.2.tar.gz包,是apache可移植性运行时库,是针对不同操作系统的底层函数库。
解压apr-1.5.2.tar.gz包后,进入到apr目录,然后执行以下命令进行编译:
./configure --prefix=/usr/local/apr && make && make install
(2)apr-util-1.5.4.tar.gz包,是apache可移植性运行时库的工具包。
解压apr-util-1.5.4.tar.gz包后,进入到apr目录,然后执行以下命令进行编译:
./configure --prefix=/usr/local/apr-util -with-apr=/usr/local/apr/bin/apr-1-config && make && make install
(3)pcre-8.38.tar.gz包,全称Perl Compatible Regular Expressions,是Perl正则表达式函数库。
解压pcre-8.38.tar.gz包后,进入到apr目录,然后执行以下命令进行编译:
./configure --prefix=/usr/local/pcre && make && make install
如果报出You need a C++ compiler for C++ support.的错误,则表示需要安装c++的编译插件:
yum install -y gcc gcc-c++
安装了gcc插件后,可以使用命令 rpm -qa gcc 来判断是否安装成功,然后再编译pcre即可。
步骤二:解压httpd-2.4.23.tar.gz,然后进入到解压的目录httpd-2.4.23下,目录下有个configure文件,是可执行的shell
脚本,用于配置编译的内容和选项。
运行如下脚本(参数是常用配置):
./configure --prefix=/usr/local/apache2 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/
--with-pcre=/usr/local/pcre --enable-rewrite --enable-ssl --enable-so
--enable-headers --enable-expires --with-mpm=worker --enable-modules=most --enable-deflate
&& make && make install
说明:
--prefix=/usr/local/apache2表示指定apache的安装路径,默认安装路径为/usr/local/apache2。
--with-apr --with-apr-util --with-pcre:表示依赖的第三方库的位置。
--enable-rewrite提供URL规则的重写,即根据已知的URL地址,转换为其它想要的URL地址。
--enable-ssl 激活ssl加密的使用。
--enable-so激活apache服务的DSO(Dynamic Shared Objects动态共享目标),即在以后可以以DSO的方式编译安装共享模块。
--enable-headers提供允许对HTTP请求头的控制。
--enable-expires激活文件控制HTTP的“Expires:”和“Cache-Control:”头内容,即对网站图片等内容,提供客户端浏览器缓存的设置。
--with-mpm=worker选择apache mpm的模式为worker模式。如果不指定此参数,默认的模式是prefork进程模式。
--enable-deflate提供对内容的压缩传输编码支持。使用此参数会大大提高传输速度,提升访问者访问的体验。
&& make && make install:编译apache源码,如果没安装编译插件则安装。
注意:
(1)上面的命令为了显示而使用了手动换行,但是复制到linux上进行执行命令时,必须去除换行后才执行,否则报错。
(2)如果编译时抛出mod_deflate has been requested but can not be built due to prerequisite failures错误
则表示没有安装zlib-devel(提供压缩功能)插件,执行命令来安装:yum install zlib-devel
(3)如果编译时抛出error: mod_ssl has been requested but can not be built due to prerequisite failures错误
则表示没有安装openssl-devel(加密功能)插件,执行命令来安装:yum install openssl-devel
3、apache的MPM模块(多路处理模块),主要有三种;prefork、worker和event,不同系统都用默认的使用模式,
Linux默认使用prefork模式,这三种其中的区别是:
a)prefork: 使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。
在大多数平台上,Prefork MPM在效率上要比Worker MPM要高,但是内存和CPU使用要大得多。
b)worker: 使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。
通常来说,在一个高流量的HTTP服务器上,Worker MPM是个比较好的选择,因为Worker MPM的
内存使用比Prefork MPM要低得多。但如果一个线程崩溃,整个进程就会连同其所有线程一起"死掉"。
c)event: 基于事件监听形式的,它把服务进程从连接中分离出来。在服务器处理速度很快,但是不能在
安全HTTP(HTTPS)访问下工作,并且目前处于试验状态,官方目前不建议使用。
4、httpd.conf的相关配置:
(1)指定服务器地址和端口:
ServerName localhost:80
(2)修改web部署的目录:
步骤一:默认为DocumentRoot "C:/wamp/bin/apache/Apache2.2.21/htdocs",现修改成DocumentRoot "D:/Apache"
步骤二:默认为<Directory "C:/wamp/bin/apache/Apache2.2.21/htdocs">,现修改成<Directory " D:/Apache">
(3)修改访问的默认文件名称:
DirectoryIndex index.html
(4)配置多虚拟主机:
<!--指定虚拟主机127.0.0.1:80-->
<VirtualHost 127.0.0.1:80>
ServerName "127.0.0.1:80"
DocumentRoot "D:\AppServ\www"
<Directory "D:\AppServ\www">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<!--指定虚拟主机127.0.0.2:80-->
<VirtualHost 127.0.0.2:80>
ServerName "127.0.0.2:80"
DocumentRoot "D:\AppServ\www2"
<Directory "D:\AppServ\www2">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
三、使用笔记:
1、 apache的首次启动:
(1)防止apache启动报错,在apache启动前指定端口号和ip(默认就是80端口):
修改配置文件:/usr/local/apache2/conf/httpd.conf
添加端口内容: ServerName localhost:80
(2)执行启动命令启动apache:
/usr/local/apache2/bin/apachectl start
(3)如果想系统启动时开启apache服务,在/etc/rc.local下添加如下命令:
/usr/local/apache2/bin/apachectl start
2、在 "已编译好的apache服务器/apache2.tar.gz" 文件,存放的是已经经过编译的apache服务器,可以直接在linux服务器上部署使用。
注意:
(1)apache2.tar.gz文件是编译到/usr/local/apache2中的,那么解压后也需要放到/usr/local/目录中,以免出现问题。
(2)apache2.tar.gz的编译中,配置的mpm模块为worker模式,并且支持ssl加密,对传输内容也支持压缩。
3、编译后的apache目录介绍:
bin: 可执行的二进制文件
build:未知
cgi-bin: 未知
conf: 存放服务器的配置文件,其中httpd.conf 是主要的配置文件。
error:保存错误信息
htdocs:服务器的项目文档根目录,即项目部署的地方,默认首页就是该目录下的index.html文件。可以修改httpd.conf下的DocumentRoot来指定web目录。
icons:存放图标
include: 未知
logs: 保存服务器日志,其中access_log文件是访问日志文件,error_log文件是错误日志文件
man: 保存Apache服务器手册页文件,文件被分别保存在man1和man8两个子目录中,可用man命令阅读指定的手册页文件查询目录的帮助信息
manual: Apache服务器的帮助手册文件,文件是网页格式的,可以通过访问Apache服务器中的/manual目录阅读该目录下的帮助文件内容
modules:模块目录,例如PHP MEMCACHE编译后的模块在这里面