源码编译安装httpd 2.4,并提供系统服务管理脚本

源码编译安装httpd:

获取httpd源码包法一:

我这以windows上的虚拟机为例子,可以选择在windows上去官网下载httpd的源码包:

链接:Welcome! - The Apache HTTP Server Project

接着传入虚拟机实现安装

获取httpd源码包法二:

也可以在虚拟机上用wget命令直接获取httpd的源码包,我这里选择第二种方法,

bash 复制代码
wget https://downloads.apache.org/httpd/httpd-2.4.62.tar.gz

安装httpd并进行相关配置

官方相关文档:Compiling and Installing - Apache HTTP Server Version 2.4

解压并安装相关依赖:
bash 复制代码
#进行解压
tar xzf httpd-2.4.62.tar.gz

#切换到httpd目录
cd httpd-2.4.62

#安装相关依赖
dnf install gcc pcre-devel zlib-devel apr-devel apr-util-devel -y
编译安装:
bash 复制代码
#配置
 ./configure --prefix=/usr/local/apache2 --enable-so --enable-mods-shared=all

#编译
make

#安装
make install
配置httpd:
bash 复制代码
#创建httpd配置文件目录,并设置httpd.conf
mkdir /etc/httpd
cp /usr/local/apache2/conf/httpd.conf /etc/httpd/httpd.conf

服务管理脚本(方法一),使用systemd管理:

bash 复制代码
#创建systemd服务文件
vim /usr/lib/systemd/system/httpd.service

在文件中添加如下内容:

bash 复制代码
[Unit]
Description=Apache HTTP Server
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/apache2/logs/httpd.pid
ExecStart=/usr/local/apache2/bin/apachectl start
ExecStop=/usr/local/apache2/bin/apachectl stop
ExecReload=/usr/local/apache2/bin/apachectl graceful
Restart=on-failure

[Install]
WantedBy=multi-user.target

重载systemd配置:

bash 复制代码
systemctl daemon-reload

启动httpd服务:

bash 复制代码
systemctl start httpd

查看httpd服务状态:

bash 复制代码
systemctl status httpd

测试httpd服务

bash 复制代码
curl http://localhost

服务管理脚本(方法二),使用传统的sysvinit脚本:

创建sysvinit脚本

bash 复制代码
vim /etc/init.d/httpd
​

输入以下内容:

bash 复制代码
#!/bin/bash
# chkconfig: 2345 85 15
# description: Apache HTTP Server
# processname: httpd

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/apache2/bin/httpd
NAME=httpd
DESC="Apache HTTP Server"
LOCKFILE=/var/lock/subsys/httpd

test -x $DAEMON || exit 0

set -e

case "$1" in
  start)
    echo -n "Starting $DESC: "
    $DAEMON -k start
    touch $LOCKFILE
    echo "$NAME."
    ;;
  stop)
    echo -n "Stopping $DESC: "
    $DAEMON -k stop
    rm -f $LOCKFILE
    echo "$NAME."
    ;;
  restart|force-reload)
    echo -n "Restarting $DESC: "
    $DAEMON -k graceful
    echo "$NAME."
    ;;
  status)
    $DAEMON -k status
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|force-reload|status}" >&2
    exit 3
    ;;
esac

exit 0

设置脚本权限并添加到服务器管理:

bash 复制代码
chmod +x /etc/init.d/httpd
chkconfig --add httpd
chkconfig httpd on

启动服务:

bash 复制代码
service httpd start

测试服务:

bash 复制代码
curl http://localhost

实验中遇到的问题:

编译过程中出现报错:

上述问题可能是gcc 编译器无法找到 /usr/lib/rpm/redhat/redhat-hardened-ld 文件或目录

我们来查找查找提供 redhat-hardened-ld 的软件包

bash 复制代码
yum provides '*/redhat-hardened-ld'

重新安装redhat-rpm-config包

bash 复制代码
yum install redhat-rpm-config -y

把之前编译生成的文件清除,避免旧的文件干扰:

bash 复制代码
cd /root/httpd-2.4.62
make clean

接着重新编译即可

相关推荐
EnglishJun6 小时前
Linux系统编程(二)---学习Linux系统函数
linux·运维·学习
QT.qtqtqtqtqt6 小时前
SQL注入漏洞
java·服务器·sql·安全
小Pawn爷6 小时前
2.Docker的存储
运维·docker·容器
CaracalTiger6 小时前
OpenClaw-VSCode:在 VS Code 中通过 WebSocket 远程管理 OpenClaw 网关的完整方案
运维·ide·人工智能·vscode·websocket·开源·编辑器
qq_5470261796 小时前
LangChain 1.0 核心概念
运维·服务器·langchain
VekiSon6 小时前
Linux内核驱动——设备树原理与应用
linux·c语言·arm开发·嵌入式硬件
Trouvaille ~6 小时前
【Linux】进程间关系与守护进程详解:从进程组到作业控制到守护进程实现
linux·c++·操作系统·守护进程·作业·会话·进程组
晚霞的不甘6 小时前
Flutter for OpenHarmony 打造沉浸式呼吸引导应用:用动画疗愈身心
服务器·网络·flutter·架构·区块链
生而为虫6 小时前
[Windows] 【浏览器自动化精灵V1.0】用Excel表格控制浏览器的自动化
运维·自动化
Fcy6486 小时前
Linux下 进程(二)(进程状态、僵尸进程和孤儿进程)
linux·运维·服务器·僵尸进程·孤儿进程·进程状态