源码编译安装http2.4
来源:互联网 发布:淘宝编辑图片软件 编辑:程序博客网 时间:2024/06/01 15:52
0 目录
- 目录
- 环境
- 编译安装步骤
- 1 aprapr-util
- 2 安装httpd24
- 21 configure常用选项
- 22 常见错误
- 各目录内容
- 服务脚本修改
- 与httpd22部分特性对比
1 环境
本篇是在CentOS 6.8编译安装httpd2.4。
由于在 http://blog.csdn.net/wangzhenyu177/article/details/69808141 中已经说明编译安装步骤,本文不再赘述。主要是编译httpd2.4过程中需要注意的。
2 编译安装步骤
编译安装需要先安装开发包组”Development tools”和”Server Platform”和gcc。
httpd2.4源码在 http://httpd.apache.org 下载。
2.1 apr、apr-util
httpd可在windows、linux、unix等多种平台部署,而并不需要为每种平台都编写不同的代码实现。因为有apr、apr-util。
apr:apache portable runtime,类似于虚拟机,为apache提供运行环境。针对不同平台有不同的apr。httpd通过不同的apr,就可运行于不同的平台之上了。
CentOS 6安装的apr和apr-util版本是1.4以前的:
[root@node1 ~]% rpm -q aprapr-1.3.9-5.el6_2.x86_64[root@node1 ~]% rpm -q apr-utilapr-util-1.3.9-3.el6_0.1.x86_64
而httpd2.4需要apr、apr-util在1.4以上版本(apr和apr-util版本号可不一致),所以要先编译安装这两工具。
可在 http://apr.apache.org 下载。
由于apr-util依赖于apr,所以先编译安装apr,在解压后的apr目录下,执行:
[root@node1 apr-1.6.3]% ./configure --prefix=/usr/local/apr……[root@node1 apr-1.6.3]% make && make install……
查看指定目录有内容,一般就正常了:
[root@node1 apr-1.6.3]% ls /usr/local/apr/bin build-1 include lib
apr-util类似,不过要指定依赖的apr的位置:
[root@node1 apr-util-1.6.1]% ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
之后也是make,make install。但make时报了个错
error: expat.h: No such file or directory
没有找到expat.h头文件。这个文件在expat-devel包,默认没装,装上就ok了:
[root@node1 apr-util-1.6.1]% rpm -ql expat-devel/usr/include/expat.h……
[root@node1 apr-util-1.6.1]% ls /usr/local/apr-util/bin include lib
2.2 安装httpd2.4
2.2.1 configure常用选项
httpd的./configure的常用选项:
可以看到enable类的一般用于指定启用哪些功能,with类的一般表示依赖于哪些2。
2.2.2 常见错误
默认没有安装pcre-devel包。在./configure时报如下错误:
configure: error: pcre-config for libpcre not found
默认没有安装openssl-devel包。在./configure时报如下错误:
configure: error: mod_ssl has been requested but can not be built due to prerequisite failures
笔者最开始使用的apr-util是1.6以上的,make时报如下错误:
/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_ParserCreate'/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_GetErrorCode'/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_SetUserData'/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_ErrorString'/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_SetEntityDeclHandler'/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_ParserFree'/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_SetElementHandler'/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_StopParser'/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_Parse'/usr/local/apr-util/lib/libaprutil-1.so: undefined reference to `XML_SetCharacterDataHandler'
apr-util使用低于1.6版本的,恢复正常。
据说在CentOS 7上使用apr-utl1.6以上的没有问题。看来在CentOS 6编译安装,apr-util的版本既不能低于1.4,也不能高于1.6。
将上述错误一一修正后,编译安装完成。
该主机IP为192.168.0.106,因为是编译安装,所以没有欢迎页,但访问时会显示已启动:
3 各目录内容
编译完成后所生成的各目录:
[root@node1 httpd_24]% ls /usr/local/httpd_24/bin build cgi-bin error htdocs icons include lib logs man manual modules
大部分目录见名知意,其中:
build目录存放的是编译过程中产生的文件,其中文件config.nice记录了configure时指定的选项:
[root@node1 httpd_24]% ls build/config.nice config_vars.mk instdso.sh library.mk ltlib.mk mkdir.sh program.mk rules.mk special.mk[root@node1 httpd_24]% cat build/config.nice #! /bin/sh## Created by configure"./configure" \"--prefix=/usr/local/httpd_24" \"--sysconfdir=/etc/httpd_24" \"--enable-so" \"--enable-ssl" \"--enable-cgi" \"--enable-rewrite" \"--enable-modules=most" \"--enable-mpms-shared=all" \"--with-mpm=prefork" \"--with-zlib" \"--with-pcre" \"--with-apr=/usr/local/apr" \"--with-apr-util=/usr/local/apr-util" \"$@"
- error,记录了各错误页面内容。404等错误页面就放在这里,报错时显示的就是这些页面内容。
- htdocs,网页文件放置位置。因为是编译安装的,网页文件没有放在/var下3。
- man,man手册
- manual,官方文档
- modules,各模块
- logs,日志。httpd的pid文件也在此目录
因为编译时,通过–sysconfdir选项指定了配置文件路径为/etc/httpd_24,否则配置文件也在/usr/local/httpd_24:
[root@node1 httpd_24]% ls /etc/httpd_24extra httpd.conf magic mime.types original
除了主配置文件httpd.conf,其他配置文件都在extra目录:
[root@node1 httpd_24]% ls /etc/httpd_24/extra/httpd-autoindex.conf httpd-info.conf httpd-mpm.conf httpd-userdir.confhttpd-dav.conf httpd-languages.conf httpd-multilang-errordoc.conf httpd-vhosts.confhttpd-default.conf httpd-manual.conf httpd-ssl.conf proxy-html.conf
CentOS 7上的httpd的其他配置文件,是在/etc/conf.d/*和/etc/conf.modules.d/*。
4 服务脚本修改
编译安装的程序一般没有服务脚本,不过httpd自带有启动脚本apachectl:
[root@node1 httpd_24]% ls /usr/local/httpd_24/binab apu-1-config checkgid envvars fcgistarter htdbm htpasswd httxt2dbm rotatelogsapachectl apxs dbmmanage envvars-std htcacheclean htdigest httpd logresolve
可以看到命令httpd也在此目录。把该路径添加至PATH就可以使用了,否则要使用绝对路径。
不过即便把该路径添加至PATH,仍不能使用service来控制,可以把系统上httpd2.2的服务脚本做些修改作为2.4的服务脚本:
[root@node1 init.d]% cd /etc/rc.d/init.d/[root@node1 init.d]% cp httpd httpd_24
修改httpd_24中的部分内容:
1、把其中读取httpd服务脚本配置文件/etc/sysconfig/httpd的语句删除。这是为避免httpd2.2的服务脚本配置文件影响到httpd_24(虽然一般httpd的服务脚本配置文件也都是注释信息):
if [ -f /etc/sysconfig/httpd ]; then . /etc/sysconfig/httpdfi
2、修改apachectl、httpd的文件路径,修改pid文件、锁文件:
apachectl=/usr/sbin/apachectlhttpd=${HTTPD-/usr/sbin/httpd}prog=httpdpidfile=${PIDFILE-/var/run/httpd/httpd.pid}lockfile=${LOCKFILE-/var/lock/subsys/httpd}
修改为:
apachectl=/usr/local/httpd_24/bin/apachectlhttpd=${HTTPD-/usr/local/httpd_24/bin/httpd}prog=httpdpidfile=${PIDFILE-/usr/local/httpd_24/logs/httpd.pid}lockfile=${LOCKFILE-/var/lock/subsys/httpd_24}
apachectl和httpd改为httpd2.4对应的路径;
锁文件改个名就行;
pid文件也可不修改,如果不修改则httpd2.2和httpd2.4不能同时启动,因为pid文件相同。这里把pid文件也改了。编译安装的pid文件是/usr/local/httpd_24/logs/httpd.pid。
这样就可以通过服务脚本httpd_24控制了:
[root@node1 ~]% service httpd_24 startStarting httpd: [ OK ][root@node1 ~]% curl 192.168.0.106<html><body><h1>It works!</h1></body></html>
加入至chkconfig,令chkconfig管理其开机是否启动:
[root@node1 ~]% chkconfig --add httpd_24[root@node1 ~]% chkconfig --list httpd_24httpd_24 0:off 1:off 2:off 3:off 4:off 5:off 6:off
5 与httpd2.2部分特性对比
MPM在2.4已经是一个可动态装载、卸载的模块,prefork、worker、event模式的切换可通过配置文件调整;而httpd2.2中的MPM是静态模块,只能一同编译,不能动态装载卸载:
[root@node1 ~]% httpd -lCompiled in modules: core.c prefork.c http_core.c mod_so.c[root@node1 ~]% /usr/local/httpd_24/bin/httpd -lCompiled in modules: core.c mod_so.c http_core.c
可以看到2.2默认使用的是prefork4,并且是和httpd一并编译的。而httpd2.4的编译的模块就不再有prefork。
(完)
- 在httpd2.4中,prefork、worker、event作为模块,可使用配置文件切换。2.2中则不能作为动态模块,只能和httpd一块编译。CentOS6默认是将3者都编译了,对应不同的应用程序/usr/bin/httpd、/usr/bin/httpd.worker、/usr/bin/httpd.event。 ↩
- 还可使用disable、without,显式地指定禁用哪些功能、不依赖哪些程序包等。 ↩
- 包括运行httpd的user、group也变成了daemon而不是apache。
编译安装配置和yum安装的配置很多不一样,可在配置文件看到,此处不赘述了 ↩ - 所以CentOS 6为了用户可使用prefork、worker、event三种模式,把三种都分别编译了。默认使用prefork,另外两模式对应的程序为/usr/bin/httpd.worker和/usr/bin/httpd.event。服务脚本自动启动的是prefork,这是在服务脚本配置文件/etc/sysconfig/httpd中定义的 ↩
- 源码编译安装http2.4
- 在CentOS6上编译安装http2.4
- 在CentOS6上编译安装http2.4
- centos6.5源码编译http2.4.9、虚拟主机、基于用户认证
- nginx http2 源码分析
- http2
- HTTP2
- HTTP2
- http2
- http2
- CentOS6.4编译源码安装svn
- Apache2.4 + PHP 5.5 源码编译安装
- TensorFlow r1.4 从源码编译安装
- openvswitch2.8.1 centos7.4 源码编译安装
- 源码编译安装LNMP
- 安装编译数据库源码
- xtrabackup源码编译安装
- 源码编译安装mysql
- 全面的软件测试
- 研发项目的人员组成
- ORA-28040: No matching authentication protocol
- Windows 7 64位 下用QT5.7连接MySQL 教程
- 使用maven构建工具制作验证码
- 源码编译安装http2.4
- VS中添加预处理宏的方法
- 4种PHP异步执行的常用方式
- FastJSON、Gson和Jackson性能对比和共同缺点,注意事项
- 蓝桥杯练习----入门训练 圆的面积
- main-bower-files <gulp插件>
- win10 下 c++遍历文件夹
- React native Model组件的使用
- File类