在服务器管理领域,Apache HTTP Server(通常称为httpd)是全球使用最广泛的Web服务器软件之一,虽然通过yum
或dnf
等包管理器安装httpd非常便捷,但编译安装提供了无与伦比的灵活性,它允许我们获取最新版本的软件,自定义安装路径,按需启用或禁用特定模块,从而进行深度性能优化和安全加固,本文将详细介绍如何在CentOS系统上从源码编译安装httpd,帮助您构建一个完全定制化的Web服务环境。
准备工作:安装依赖与下载源码
在开始编译之前,必须确保系统具备编译环境以及httpd运行所依赖的库,一个干净、最小化的CentOS安装是理想的起点。
安装编译工具及依赖库
编译过程需要“Development Tools”工具集,以及apr
、pcre
、openssl
等核心库的开发包,打开终端,执行以下命令来安装所有必需的组件:
sudo yum groupinstall -y "Development Tools" sudo yum install -y pcre-devel openssl-devel expat-devel libxml2-devel
上述命令中,pcre-devel
为httpd提供正则表达式支持,openssl-devel
用于启用SSL/TLS功能(即HTTPS),而expat-devel
和libxml2-devel
是其解析XML所必需的。
下载httpd源码
推荐从Apache官方网站下载最新稳定版的源码,访问 Apache HTTP Server下载页面 获取最新的tar.gz压缩包链接,使用wget
命令将其下载到服务器上。
# 请将URL替换为最新的版本链接 wget https://downloads.apache.org/httpd/httpd-2.4.58.tar.gz
下载完成后,使用tar
命令解压源码包:
tar -zxvf httpd-2.4.58.tar.gz cd httpd-2.4.58
我们已进入解压后的源码目录,可以开始配置编译选项了。
编译与安装:定制您的httpd
编译安装的核心在于./configure
脚本,它用于检查系统环境并生成Makefile文件,通过向其传递不同的参数,我们可以精确控制httpd的安装方式和功能。
配置编译选项
一个典型的、功能齐全的配置命令如下:
./configure --prefix=/usr/local/apache2 --enable-so --enable-rewrite --enable-ssl --with-mpm=event --with-ssl=/usr --enable-deflate --enable-expires
下表解释了这些关键参数的作用:
参数 | 作用说明 |
---|---|
--prefix=/usr/local/apache2 | 指定httpd的安装目录,便于管理和版本控制。 |
--enable-so | 启用动态共享对象(DSO)支持,允许运行时加载模块,如PHP。 |
--enable-rewrite | 启用URL重写模块,是构建友好URL和实现复杂路由的基础。 |
--enable-ssl | 启用SSL/TLS模块,为网站提供HTTPS加密访问能力。 |
--with-mpm=event | 指定使用event多路处理模块,性能优异,适合高并发场景。 |
--with-ssl=/usr | 指定OpenSSL的安装路径,通常系统默认路径为/usr 。 |
--enable-deflate | 启用压缩模块,对输出内容进行压缩,加快客户端加载速度。 |
--enable-expires | 启用过期控制模块,可设置文件缓存时间,优化性能。 |
执行上述命令后,如果系统环境无误,脚本将顺利结束并生成Makefile。
编译与安装
执行make
命令进行编译,这会消耗一些时间,具体取决于服务器的性能。
make
编译成功后,使用make install
命令将文件安装到之前--prefix
指定的目录中。
sudo make install
至此,httpd已被成功安装到/usr/local/apache2
目录下。
配置、启动与验证
安装工作完成后,还需要进行一系列配置才能让httpd正常服务。
配置Systemd服务
为了能使用systemctl
来管理httpd服务,我们需要创建一个systemd服务单元文件。
sudo vi /etc/systemd/system/httpd.service
在文件中填入以下内容:
[Unit] Description=The Apache HTTP Server After=network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/usr/local/apache2/logs/httpd.pid ExecStart=/usr/local/apache2/bin/apachectl start ExecReload=/usr/local/apache2/bin/apachectl graceful ExecStop=/usr/local/apache2/bin/apachectl stop PrivateTmp=true [Install] WantedBy=multi-user.target
保存并退出后,重新加载systemd守护进程以使其识别新服务:
sudo systemctl daemon-reload
启动服务并设置开机自启
现在可以使用systemctl来启动httpd,并设置其开机自动启动。
sudo systemctl start httpd sudo systemctl enable httpd
配置防火墙
CentOS默认使用firewalld
作为防火墙,需要开放HTTP(80)和HTTPS(443)端口。
sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
验证安装
检查服务状态并在浏览器中验证,执行systemctl status httpd
查看服务是否正在运行,在浏览器地址栏输入服务器的IP地址,如果看到”It works!”页面,恭喜您,httpd已成功编译安装并运行。
相关问答FAQs
问题1:如何卸载通过编译安装的httpd?
解答: 卸载编译安装的软件相对简单,如果您还保留着源码目录,可以进入该目录执行sudo make uninstall
,这会根据Makefile中的规则删除已安装的文件,如果源码目录已被删除,最直接的方法是手动删除整个安装目录,即sudo rm -rf /usr/local/apache2
,别忘了删除之前创建的systemd服务文件/etc/systemd/system/httpd.service
并重新加载systemctl daemon-reload
。
问题2:编译过程中提示“error: APR not found”或类似错误,该怎么办?
解答: 这个错误表明configure
脚本未能找到Apache运行时库(APR),尽管我们安装了pcre-devel
等,但httpd 2.4版本及以上需要单独的APR和APR-Util库,您需要从Apache官网下载这两个库的源码,先编译安装它们,然后在编译httpd时,通过--with-apr
和--with-apr-util
参数指定它们的安装路径,一个更简便的方法是在CentOS 7/8中直接安装它们的开发包:sudo yum install -y apr-devel apr-util-devel
,然后重新运行httpd的./configure
命令即可。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复