再linux centos8.0系统上编译httpd(apache) 2.4.46 最新版本!
首先centos 8.0怎么安装,这里就不叙述了,相信进来看这边文章的大佬,基本的系统安装肯定是没有问题的,并且centos 8.0可能是已经再使用中了,哈哈哈。
其实编译安装httpd再centos的各个版本中都大同小异的,一般照猫画虎就可以了,闲话不多说,那咱们就开始进入正题吧。
已安装过httpd版本的,需要把它卸载,卸载之前,把httpd的服务脚本拷贝一份,要不,还得手动配置
cp /etc/init.d/httpd ./ (yum安装的httpd,httpd的服务脚本一般存放再/etc/init.d/httpd)
卸载之前,最好停止服务
注意:上面是之前我再centos 6上操作的步骤,所以命令使用会有差异,大家这里使用centos 8的命令就可以。
首先需要再apache的官网下载httpd 2.4.46版本,其实百度搜索 “apache download” 第一个网页便是apache的官方下载页面,如下:(这里附上官方下载地址:http://httpd.apache.org/download.cgi)
然后点击进去,主要看我红框标识的部分:
然后点击 source: 后面的链接就可以下载了,这里下载的是 httpd-2.4.46.tar.gz
下载完成后,不管你用什么方法上传到你的centos 8.0上就可以。
然后解压 tar -xvf httpd-2.4.46.tar.gz
解压完成后,需要安装httpd的依赖库程序和安装环境、编译工具
yum -y install pcre-devel openssl-devel perl gcc gcc-c++
httpd-2.4*程序版本需要依赖apr-1.4或以上版本(为各个平台提供兼容性) 以及 apr-util-1.4或以上版本
在centos上apr可能被其他非http的程序依赖,因此升级rpm不太现实,因此,建议使用源代码编译安装。
这里还需要到apache 依赖组件下载页面进行下载 (官方下载地址:http://apr.apache.org/download.cgi)
分别下载 这里以 apr 1.7.0 以及 apr util 1.6.1版本 ,因为再2020-9-10,官方页面最新版本就是这2个。
首先编译1.4或以上版本的apr和apr-util(编译到指定位置,防止和原版本的apr冲突)
编译源码包之前,先进行解压,我就解压在root的家目录下(这里随便,看你心情,解压到那里都行)
先进入到apr目录
cd apr-1.7.0
先编译apr,编译到/usr/local/sbin/apr目录
./configure --prefix=/usr/local/sinb/apr && make && make install
在进入apr-util工具依赖包目录
编译到/usr/local/sbin/apr-util目录 因为apr-util是apr的依赖工具包,所以要关联apr (--with-apr=/usr/loacl/sbin/apr/)
./configure --prefix=/usr/local/sbin/apr-util --with-apr=/usr/local/sbin/apr/ && make && make install
编译过程中,如果出现以下错误:
xml/apr_xml.c:35:10: 致命错误:expat.h:没有那个文件或目录
#include <expat.h>
^~~~~~~~~
那说明 缺少 expat库
解决方法 :yum install -y expat-devel 再次编译即可
以上准备环境都做好后,最后进入到httpd-2.4.46目录
编译程序到/usr/local/sbin/apache路径,将配置文件放置到/etc/httpd2446目录下(指定目录不存在也可以,指定目录后,不存在默认会创建,这里可以随便命名,只要自己以后记得就可以!)
下面是一些编译httpd的一些功能组件介绍,根据自己使用情况编译某个功能就可以,但是一般建议都编译上。
--enable-ssl(支持加密会话,做https需要)
--enable-rewrite(支持网页重写功能,要支持网页重写必须支持网页正则表达式),
--with-pcre(正则表达式或者python正则表达式都是pcre的子集,统称为pcre,而pcre需要额外进行安装yum -y install pcre-devel)
--with-zlib(gzip压缩)
--with-apr=/usr/local/sbin/apr(调用apr)
--with-apr-util=/usr/local/sbin/apr-util/(调用apr-util)
--enable-modules=most(支持绝大部分的模块)
--enable-mpms-shared=all(支持所有的mpm模块)
--with-mpm=prefork(默认的模块为prefork)
使用以下命令编译
./configure --prefix=/usr/local/sbin/apache --sysconf=/etc/httpd2446 --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/sbin/apr --with-apr-util=/usr/local/sbin/apr-util/ --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork && make && make install
小错误演示:
编译的时候,出现如下错误,说明你调用apr这个组件的目录写错误了,这里一定要注意,根据自己当时设定好的目录去编译。
ok,正式开始编译安装:
编译完成后:
注意:需要自行创建httpd的程序用户
useradd -r httpd
这里可以使用 cat /etc/passwd 看是否有apache这个用户,可以判断你之前是否有安装过apache
我这里之前安装过apache,所以用这个用户也可以,没有的话,需要创建
因为是编译安装的,apache的指令只能在/usr/local/sbin/apache/bin/目录下使用,也就是编译安装的时候指定的目录下的bin目录下全部是Apache的指令文件,不是全局生效。
想让它全局生效,直接把apache的指令文件追加到PATH(命令搜索路径,指定系统中运行命令,是到哪些目录下去查找命令的可执行程序)后面就可以。
直接赋值或者在/etc/profile.d/目录下编写一个shell脚本,即可对所有用户进行设置,并且下次开机也生效
/etc/profile.d/ 比 /etc/profile 好维护。不想要什么变量直接删除/etc/profile.d/下对应的.sh shell脚本即可,不用像/etc/profile需要改动此文件
vim /etc/profile.d/httpd.sh 再/etc/profile.d 目录下创建一个httpd.sh脚本
export PATH=$PATH:/usr/local/sbin/apache/bin (这里环境变量赋值,需要看你将apache安装到了那个目录下,然后这里就写那个目录就可以,注意区分大小写。)
source /etc/profile.d/httpd.sh 或者 . /etc/profile.d/httpd.sh都可以运行,运行后即刻生效。
注意:这里最好是将环境变量赋值到编译安装的apache的bin目录这里,负责可能会不生效!!!
apache的主配置文件在/etc/httpd24/httpd.conf目录
/etc/httpd24/目录下的资源解读
extra 额外辅助配置文件,没有被注配置文件include的,需要手动添加
original 防止主配置文件修改错误,无法恢复,可以从这里进行复制,在进行修改
mine.types 支持哪些流媒体格式
这下面繁琐的流程,其实是再配置httpd的启动,停止、重启服务的脚本,再之前的centos6和7以及httpd 2.4版本,是需要操作这么多繁琐流程的。
是不是太麻烦了,httpd 2.4.46版本无需这么多设置,直接将这个服务脚本拷贝到/etc/init.d/目录下就可以
cp /usr/local/sbin/apache/bin/apachectl /etc/init.d/httpd
脚本启停文件需自己编写,可从httpd服务指令文件拷贝进行自定义修改即可
cp /usr/local/sbin/apache/bin/apachectl /etc/init.d/httpd
vim /etc/init.d/httpd
如果之前有安装过,并已经拷贝了一份httpd服务脚本的,就直接拿去编辑就可以,可以根据情况自行修改
chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或**一个服务,它只是简单的改变了符号连接。
启动级别,这里我就修改为35
apachectl和httpd的位置要更改为编译后的位置 (服务脚本里有的话,直接修改,没有自己添加)
如果已经有一个大写的HTTPD参数了,可以增加一个小写的httpd
更改完后,可以使用bash -n 去检查修改后的脚本文件是否有语法错误
把刚刚修改过的脚本文件移动到/etc/init.d/目录下,重启服务就可以了
注意:还需要启用deflate和rewrite模块
vim /etc/httpd2446/httpd.conf (刚刚再编译httpf的时候,将配置文件指定目录)
最后使用apachectl start启动服务。