适用 CentOS 7/8
#!/bin/bash
#
#********************************************
#Author: jacklee
#QQ: 1227163339
#Time: 2020-10-26_23:19:24
#FileName: httpd.sh
#Copyright: 2020 All rights reserved
#Description:
#*********************************************
. /etc/init.d/functions
# 下载源码
[ -f httpd-2.4.46.tar.bz2 ] || wget https://mirrors.bfsu.edu.cn/apache//httpd/httpd-2.4.46.tar.bz2
[ -f apr-1.7.0.tar.bz2 ] || wget https://mirror.bit.edu.cn/apache//apr/apr-1.7.0.tar.bz2
[ -f apr-util-1.6.1.tar.bz2 ] || wget https://mirror.bit.edu.cn/apache//apr/apr-util-1.6.1.tar.bz2
# 解压
tar xvf httpd-2.4.46.tar.bz2
tar xvf apr-1.7.0.tar.bz2
tar xvf apr-util-1.6.1.tar.bz2
# 整合
mv apr-1.7.0 httpd-2.4.46/srclib/apr
mv apr-util-1.6.1 httpd-2.4.46/srclib/apr-util
# 执行configure
cd httpd-2.4.46/
./configure \
--prefix=/apps/httpd24 \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--with-included-apr \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork
# 安装依赖包
yum -y install libxml2-devel deltarpm expat-devel
# 开始编译
m=`lscpu | awk 'NR==4 {print $2}'`
n=`lscpu | awk 'NR==7 {print $4}'`
j=$((m*n))
make -j $j && make install && action '编译完成,开始配置' || { action '编译失败!!!' false; exit; }
sleep 3
# 用户
[ id apache ] &> /dev/null && userdel -r -f apache || useradd -r -s /sbin/nologin apache
# 指定 apache 运行
sed -ri -e 's/^(user ).*/\1apache/' -e 's/^(group ).*/\1apache/' /apps/httpd24/conf/httpd.conf
# PATH
ln -s /apps/httpd24/bin/* /usr/bin/ &> /dev/null
# HELP
sed -i '/#MANDATORY_MANPATH/a MANDATORY_MANPATH /apps/httpd24/man' /etc/man_db.conf
# 开机自启
echo '/apps/httpd24/bin/httpd start' >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
# service文件
cat > /usr/lib/systemd/system/httpd24.service << EOF
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)
[Service]
Type=forking
#EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/apps/httpd24/bin/apachectl start
#ExecStart=/apps/httpd24/bin/httpd $OPTIONS -k start
ExecReload=/apps/httpd24/bin/apachectl graceful
#ExecReload=/apps/httpd24/bin/httpd $OPTIONS -k graceful
ExecStop=/apps/httpd24/bin/apachectl stop
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
# servername
sed -ri 's/#(ServerName www.example.com:80)/\1/' /apps/httpd24/conf/httpd.conf
# 语法
httpd -t
# 启动
systemctl daemon-reload
systemctl enable --now httpd24 # 注意与 service文件同名