首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Apache源码编译安装

Apache源码编译安装

原创
作者头像
Raymond运维
修改2025-09-25 07:59:12
修改2025-09-25 07:59:12
3240
举报
文章被收录于专栏:干货分享干货分享

2.3 源码编译安装

2.3.1 下载并解压缩源码包

httpd源码包下载,去“https://httpd.apache.org”网站下载,选择“Download”,如图2所示。

t2
t2

图2 下载Apache源码包

选择“Source: httpd-2.4.65.tar.gz“,如图3所示。

t3
t3

图3 下载Apache源码包

代码语言:javascript
复制
1cd /usr/local/src/
2
3# Rocky、Almalinux、CentOS、AnolisOS、OpenCloudOS、Kylin Server默认没有wget包,需要安装
4yum install-ywget
5
6# openEuler 22.03/24.03 LTS、AnolisOS 23、OpenCloudOS 9没有安装tar包,需要安装
7yum install-ytar
8
9wget https://dlcdn.apache.org/httpd/httpd-2.4.65.tar.gz
10
11tar xf httpd-2.4.65.tar.gz

2.3.2 源码编译安装

编译安装参数解释:

代码语言:javascript
复制
1./configure # 准备httpd的编译环境
2--prefix# 指定httpd安装目录
3--enable-so # 启用 DSO(Dynamic Shared Objects)支持 ,即:开启动态模块加载功能。
4--enable-ssl # 启用 Apache 的 SSL 模块( mod_ssl ),使其支持 HTTPS。
5--enable-cgi # 该参数会启用 Apache 对 CGI 脚本 的支持,使得服务器可以运行如  .cgi 、 .pl 、 .py  等脚本文件,从而生成动态网页内容。
6--enable-rewrite # 启用 mod_rewrite 模块,支持 URL 重写
7--with-zlib # 启用 zlib 支持,用于压缩传输内容
8--with-pcre # 用于指定 PCRE(Perl Compatible Regular Expressions)库的安装路径。PCRE 是 Apache 用于支持正则表达式的核心依赖,尤其是  mod_rewrite  等模块。
9--with-included-apr # 使用 httpd 自带的 APR 和 APR-Util,适合避免系统依赖问题 
10
11--enable-modules # 控制哪些模块被静态编译进主程序(即不能动态加载)。
12# all :启用所有模块(静态方式),体积大,灵活性差。
13# most :启用大多数常用模块(静态方式),是折中选择。
14
15--enable-mpms-shared # 用于控制 MPM(Multi-Processing Module,多处理模块)是否以动态共享模块(DSO)方式构建。 
16# --enable-mpms-shared=all,将所有平台支持的 MPM 模块都编译为共享模块,即  event 、 worker 、prefork  等都会被编译成  .so  文件,供运行时动态加载。
17# --enable-mpms-shared=event worker,仅将指定的 MPM 编译为共享模块,多个模块用空格分隔。 
18# 默认行为(不加此参数) ,MPM 会被静态编译进主程序,无法通过配置文件切换,必须重新编译才能更换 MPM。
19
20--with-mpm # 用于指定默认使用的 MPM(Multi-Processing Module,多路处理模块)。这个参数决定了 Apache 的并发处理模型,对性能和资源使用有直接影响。
21# prefork,多进程模型,每个进程处理一个请求,稳定性高,兼容性最好;适合低并发、需要兼容非线程安全模块(如 mod_php) 
22# worker ,多进程 + 多线程混合模型,资源占用更少,并发能力更强;适合中高并发,线程安全模块
23# event,类似 worker,但对 Keep-alive 连接做了优化,性能更好 ;高并发、静态资源为主,Apache 2.4+ 推荐 
2.3.2.1 Rocky 9/10、AlmaLinux 9/10、CentOS 7、CentOS Stream 9/10、openEuler 24.03 LTS、AnolisOS 23、OpenCloudOS 9、Kylin Server V11

进入httpd包解压的目录:

代码语言:javascript
复制
1cd httpd-2.4.65

执行configure:

代码语言:javascript
复制
1./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
2...
3configure: error: Bundled APR requested but not found at ./srclib/. Download and unpack the corresponding apr and apr-util packages to ./srclib/. # 提示,配置:错误:请求了捆绑的APR,但在./srclib/中未找到。请下载并解压相应的apr和apr-util包到./srclib/。

下载apr和apr-util包,解压并移动到相应目录:

代码语言:javascript
复制
1cd..
2
3wget https://mirrors.cloud.tencent.com/apache/apr/apr-1.7.6.tar.gz
4wget https://mirrors.cloud.tencent.com/apache/apr/apr-util-1.6.3.tar.gz
5
6tar xf apr-1.7.6.tar.gz
7tar xf apr-util-1.6.3.tar.gz
8
9mv apr-1.7.6 httpd-2.4.65/srclib/apr
10mv apr-util-1.6.3 httpd-2.4.65/srclib/apr-util

进入httpd包解压的目录:

代码语言:javascript
复制
1cd httpd-2.4.65

继续执行configure:

代码语言:javascript
复制
1./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
2...
3checking for gcc... no # 提示,没有gcc
4checking for cc... no
5checking for cl.exe... no
6checking for clang... no
7configure: error: in'/usr/local/src/httpd-2.4.65/srclib/apr':
8configure: error: no acceptable C compiler found in$PATH
9See 'config.log'formore details
10configure failed for srclib/apr

安装gcc包:

代码语言:javascript
复制
1yum install-y gcc

继续执行configure:

代码语言:javascript
复制
1./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
2...
3configure: error: pcre(2)-config for libpcre not found. PCRE is required and available from http://pcre.org/
4# 提示,没有pcre

安装pcre2-devel包:

代码语言:javascript
复制
1yum install-y  pcre2-devel

继续执行configure:

代码语言:javascript
复制
1./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
2...
3checking whether to enable mod_ssl... configure: error: mod_ssl has been requested but can not be built due to prerequisite failures # 提示,没有mod_ssl

安装openssl-devel包:

代码语言:javascript
复制
1yum install-y openssl-devel

继续执行configure:

代码语言:javascript
复制
1./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
2...
3config.status: creating test/pyhttpd/config.ini
4config.status: creating docs/conf/httpd.conf
5config.status: creating docs/conf/extra/httpd-autoindex.conf
6config.status: creating docs/conf/extra/httpd-dav.conf
7config.status: creating docs/conf/extra/httpd-default.conf
8config.status: creating docs/conf/extra/httpd-info.conf
9config.status: creating docs/conf/extra/httpd-languages.conf
10config.status: creating docs/conf/extra/httpd-manual.conf
11config.status: creating docs/conf/extra/httpd-mpm.conf
12config.status: creating docs/conf/extra/httpd-multilang-errordoc.conf
13config.status: creating docs/conf/extra/httpd-ssl.conf
14config.status: creating docs/conf/extra/httpd-userdir.conf
15config.status: creating docs/conf/extra/httpd-vhosts.conf
16config.status: creating docs/conf/extra/proxy-html.conf
17config.status: creating include/ap_config_layout.h
18config.status: creating support/apxs
19config.status: creating support/apachectl
20config.status: creating support/dbmmanage
21config.status: creating support/envvars-std
22config.status: creating support/log_server_status
23config.status: creating support/logresolve.pl
24config.status: creating support/phf_abuse_log.cgi
25config.status: creating support/split-logfile
26config.status: creating build/rules.mk
27config.status: creating build/pkg/pkginfo
28config.status: creating build/config_vars.sh
29config.status: creating include/ap_config_auto.h
30config.status: executing default commands
31configure: summary of build options:
32
33    Server Version: 2.4.65
34    Install prefix: /apps/httpd
35    C compiler:     gcc
36    CFLAGS:          -g-O2
37    CPPFLAGS:        -DLINUX-D_REENTRANT-D_GNU_SOURCE
38    LDFLAGS:
39    LIBS:
40    C preprocessor: gcc -E

执行make:

代码语言:javascript
复制
1make-j$(nproc)&&makeinstall
2...
3httpd-2.4.65/srclib/apr-util/include/private  -I/usr/local/src/httpd-2.4.65/srclib/apr/include    -o xml/apr_xml.lo -c xml/apr_xml.c &&touch xml/apr_xml.lo
4xml/apr_xml.c:35:10: fatal error: expat.h: No such file or directory # 提示,缺少expat.h文件
535|#include
6|          ^~~~~~~~~
7compilation terminated.
8make[3]: *** [/usr/local/src/httpd-2.4.65/srclib/apr-util/build/rules.mk:207: xml/apr_xml.lo] Error 1
9make[3]: *** Waiting for unfinished jobs....
10make[3]: Leaving directory '/usr/local/src/httpd-2.4.65/srclib/apr-util'
11make[2]: *** [/usr/local/src/httpd-2.4.65/srclib/apr-util/build/rules.mk:119: all-recursive] Error 1
12make[2]: Leaving directory '/usr/local/src/httpd-2.4.65/srclib/apr-util'
13make[1]: *** [/usr/local/src/httpd-2.4.65/build/rules.mk:75: all-recursive] Error 1
14make[1]: Leaving directory '/usr/local/src/httpd-2.4.65/srclib'
15make: *** [/usr/local/src/httpd-2.4.65/build/rules.mk:75: all-recursive] Error 1

安装expat-devel包:

代码语言:javascript
复制
1yum install-y expat-devel

重新执行configure:

代码语言:javascript
复制
1# 再次执行make之前先清理之前的操作
2make clean
3
4./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event

重新执行make:

代码语言:javascript
复制
1make-j$(nproc)&&makeinstall

总结编译过程:

代码语言:javascript
复制
1# 下载apr和apr-util包,解压并移动到相应目录
2wget https://mirrors.cloud.tencent.com/apache/apr/apr-1.7.6.tar.gz
3wget https://mirrors.cloud.tencent.com/apache/apr/apr-util-1.6.3.tar.gz
4
5tar xf apr-1.7.6.tar.gz
6tar xf apr-util-1.6.3.tar.gz
7
8mv apr-1.7.6 httpd-2.4.65/srclib/apr
9mv apr-util-1.6.3 httpd-2.4.65/srclib/apr-util
10
11# 安装依赖包
12yum install-y gcc pcre2-devel openssl-devel expat-devel
13
14# 进入httpd包解压的目录
15cd httpd-2.4.65
16
17# 执行configure
18./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
19
20# 执行make
21make-j$(nproc)&&makeinstall
2.3.2.2 Rocky 8、AlmaLinux 8、CentOS Stream 8、openEuler 22.03 LTS、AnolisOS 8、OpenCloudOS 8、Kylin Server V10

进入httpd包解压的目录:

代码语言:javascript
复制
1cd httpd-2.4.65

执行configure:

代码语言:javascript
复制
1./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
2...
3configure: error: Bundled APR requested but not found at ./srclib/. Download and unpack the corresponding apr and apr-util packages to ./srclib/. # 提示,配置:错误:请求了捆绑的APR,但在./srclib/中未找到。请下载并解压相应的apr和apr-util包到./srclib/。

下载apr和apr-util并解压,复制到相应目录:

代码语言:javascript
复制
1cd..
2
3wget https://mirrors.cloud.tencent.com/apache/apr/apr-1.7.6.tar.gz
4wget https://mirrors.cloud.tencent.com/apache/apr/apr-util-1.6.3.tar.gz
5
6tar xf apr-1.7.6.tar.gz
7tar xf apr-util-1.6.3.tar.gz
8
9mv apr-1.7.6 httpd-2.4.65/srclib/apr
10mv apr-util-1.6.3 httpd-2.4.65/srclib/apr-util

进入httpd包解压的目录:

代码语言:javascript
复制
1cd httpd-2.4.65

继续执行configure:

代码语言:javascript
复制
1./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
2...
3checking for gcc... no # 提示,没有gcc
4checking for cc... no
5checking for cl.exe... no
6checking for clang... no
7configure: error: in'/usr/local/src/httpd-2.4.65/srclib/apr':
8configure: error: no acceptable C compiler found in$PATH
9See 'config.log'formore details
10configure failed for srclib/apr

安装gcc包:

代码语言:javascript
复制
1yum install-y gcc

继续执行configure:

代码语言:javascript
复制
1./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
2...
3configure: error: pcre(2)-config for libpcre not found. PCRE is required and available from http://pcre.org/
4# 提示,没有pcre

安装pcre2-devel包:

代码语言:javascript
复制
1yum install-y  pcre2-devel

继续执行configure:

代码语言:javascript
复制
1./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
2...
3checking whether to enable mod_ssl... configure: error: mod_ssl has been requested but can not be built due to prerequisite failures # 提示,没有mod_ssl

安装openssl-devel包:

代码语言:javascript
复制
1yum install-y openssl-devel

继续执行configure:

代码语言:javascript
复制
1./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
2...
3config.status: creating test/pyhttpd/config.ini
4config.status: creating docs/conf/httpd.conf
5config.status: creating docs/conf/extra/httpd-autoindex.conf
6config.status: creating docs/conf/extra/httpd-dav.conf
7config.status: creating docs/conf/extra/httpd-default.conf
8config.status: creating docs/conf/extra/httpd-info.conf
9config.status: creating docs/conf/extra/httpd-languages.conf
10config.status: creating docs/conf/extra/httpd-manual.conf
11config.status: creating docs/conf/extra/httpd-mpm.conf
12config.status: creating docs/conf/extra/httpd-multilang-errordoc.conf
13config.status: creating docs/conf/extra/httpd-ssl.conf
14config.status: creating docs/conf/extra/httpd-userdir.conf
15config.status: creating docs/conf/extra/httpd-vhosts.conf
16config.status: creating docs/conf/extra/proxy-html.conf
17config.status: creating include/ap_config_layout.h
18config.status: creating support/apxs
19config.status: creating support/apachectl
20config.status: creating support/dbmmanage
21config.status: creating support/envvars-std
22config.status: creating support/log_server_status
23config.status: creating support/logresolve.pl
24config.status: creating support/phf_abuse_log.cgi
25config.status: creating support/split-logfile
26config.status: creating build/rules.mk
27config.status: creating build/pkg/pkginfo
28config.status: creating build/config_vars.sh
29config.status: creating include/ap_config_auto.h
30config.status: executing default commands
31configure: summary of build options:
32
33    Server Version: 2.4.65
34    Install prefix: /apps/httpd
35    C compiler:     gcc
36    CFLAGS:          -g-O2
37    CPPFLAGS:        -DLINUX-D_REENTRANT-D_GNU_SOURCE
38    LDFLAGS:
39    LIBS:
40    C preprocessor: gcc -E

执行make:

代码语言:javascript
复制
1yum install-ymake
2
3make-j$(nproc)&&makeinstall
4...
5httpd-2.4.65/srclib/apr-util/include/private  -I/usr/local/src/httpd-2.4.65/srclib/apr/include    -o xml/apr_xml.lo -c xml/apr_xml.c &&touch xml/apr_xml.lo
6xml/apr_xml.c:35:10: fatal error: expat.h: No such file or directory # 提示,缺少expat.h文件
735|#include
8|          ^~~~~~~~~
9compilation terminated.
10make[3]: *** [/usr/local/src/httpd-2.4.65/srclib/apr-util/build/rules.mk:207: xml/apr_xml.lo] Error 1
11make[3]: *** Waiting for unfinished jobs....
12make[3]: Leaving directory '/usr/local/src/httpd-2.4.65/srclib/apr-util'
13make[2]: *** [/usr/local/src/httpd-2.4.65/srclib/apr-util/build/rules.mk:119: all-recursive] Error 1
14make[2]: Leaving directory '/usr/local/src/httpd-2.4.65/srclib/apr-util'
15make[1]: *** [/usr/local/src/httpd-2.4.65/build/rules.mk:75: all-recursive] Error 1
16make[1]: Leaving directory '/usr/local/src/httpd-2.4.65/srclib'
17make: *** [/usr/local/src/httpd-2.4.65/build/rules.mk:75: all-recursive] Error 1

安装expat-devel包:

代码语言:javascript
复制
1yum install-y expat-devel

重新执行configure:

代码语言:javascript
复制
1# 再次执行make之前先清理之前的操作
2make clean
3
4./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event

重新执行make:

代码语言:javascript
复制
1make-j$(nproc)&&makeinstall

总结编译过程:

代码语言:javascript
复制
1# 下载apr和apr-util包,解压并移动到相应目录
2wget https://mirrors.cloud.tencent.com/apache/apr/apr-1.7.6.tar.gz
3wget https://mirrors.cloud.tencent.com/apache/apr/apr-util-1.6.3.tar.gz
4
5tar xf apr-1.7.6.tar.gz
6tar xf apr-util-1.6.3.tar.gz
7
8mv apr-1.7.6 httpd-2.4.65/srclib/apr
9mv apr-util-1.6.3 httpd-2.4.65/srclib/apr-util
10
11# 安装依赖包
12yum install-y gcc pcre2-devel openssl-devel make expat-devel
13
14# 进入httpd包解压的目录
15cd httpd-2.4.65
16
17# 执行configure
18./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
19
20# 执行make
21make-j$(nproc)&&makeinstall
2.3.2.3 UOS Server V20

进入httpd包解压的目录:

代码语言:javascript
复制
1cd httpd-2.4.65

执行configure:

代码语言:javascript
复制
1./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
2...
3configure: error: Bundled APR requested but not found at ./srclib/. Download and unpack the corresponding apr and apr-util packages to ./srclib/. # 提示,配置:错误:请求了捆绑的APR,但在./srclib/中未找到。请下载并解压相应的apr和apr-util包到./srclib/。

下载apr和apr-util包,解压并移动到相应目录:

代码语言:javascript
复制
1cd..
2
3wget https://mirrors.cloud.tencent.com/apache/apr/apr-1.7.6.tar.gz
4wget https://mirrors.cloud.tencent.com/apache/apr/apr-util-1.6.3.tar.gz
5
6tar xf apr-1.7.6.tar.gz
7tar xf apr-util-1.6.3.tar.gz
8
9mv apr-1.7.6 httpd-2.4.65/srclib/apr
10mv apr-util-1.6.3 httpd-2.4.65/srclib/apr-util

进入httpd包解压的目录:

代码语言:javascript
复制
1cd httpd-2.4.65

继续执行configure:

代码语言:javascript
复制
1./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
2...
3config.status: creating test/pyhttpd/config.ini
4config.status: creating docs/conf/httpd.conf
5config.status: creating docs/conf/extra/httpd-autoindex.conf
6config.status: creating docs/conf/extra/httpd-dav.conf
7config.status: creating docs/conf/extra/httpd-default.conf
8config.status: creating docs/conf/extra/httpd-info.conf
9config.status: creating docs/conf/extra/httpd-languages.conf
10config.status: creating docs/conf/extra/httpd-manual.conf
11config.status: creating docs/conf/extra/httpd-mpm.conf
12config.status: creating docs/conf/extra/httpd-multilang-errordoc.conf
13config.status: creating docs/conf/extra/httpd-ssl.conf
14config.status: creating docs/conf/extra/httpd-userdir.conf
15config.status: creating docs/conf/extra/httpd-vhosts.conf
16config.status: creating docs/conf/extra/proxy-html.conf
17config.status: creating include/ap_config_layout.h
18config.status: creating support/apxs
19config.status: creating support/apachectl
20config.status: creating support/dbmmanage
21config.status: creating support/envvars-std
22config.status: creating support/log_server_status
23config.status: creating support/logresolve.pl
24config.status: creating support/phf_abuse_log.cgi
25config.status: creating support/split-logfile
26config.status: creating build/rules.mk
27config.status: creating build/pkg/pkginfo
28config.status: creating build/config_vars.sh
29config.status: creating include/ap_config_auto.h
30config.status: executing default commands
31configure: summary of build options:
32
33    Server Version: 2.4.65
34    Install prefix: /apps/httpd
35    C compiler:     gcc
36    CFLAGS:          -g-O2-pthread
37    CPPFLAGS:        -DLINUX-D_REENTRANT-D_GNU_SOURCE
38    LDFLAGS:
39    LIBS:
40    C preprocessor: gcc -E

执行make:

代码语言:javascript
复制
1make-j$(nproc)&&makeinstall
2...
3httpd-2.4.65/srclib/apr-util/include/private  -I/usr/local/src/httpd-2.4.65/srclib/apr/include    -o xml/apr_xml.lo -c xml/apr_xml.c &&touch xml/apr_xml.lo
4xml/apr_xml.c:35:10: fatal error: expat.h: No such file or directory # 提示,缺少expat.h文件
535|#include
6|          ^~~~~~~~~
7compilation terminated.
8make[3]: *** [/usr/local/src/httpd-2.4.65/srclib/apr-util/build/rules.mk:207: xml/apr_xml.lo] Error 1
9make[3]: *** Waiting for unfinished jobs....
10make[3]: Leaving directory '/usr/local/src/httpd-2.4.65/srclib/apr-util'
11make[2]: *** [/usr/local/src/httpd-2.4.65/srclib/apr-util/build/rules.mk:119: all-recursive] Error 1
12make[2]: Leaving directory '/usr/local/src/httpd-2.4.65/srclib/apr-util'
13make[1]: *** [/usr/local/src/httpd-2.4.65/build/rules.mk:75: all-recursive] Error 1
14make[1]: Leaving directory '/usr/local/src/httpd-2.4.65/srclib'
15make: *** [/usr/local/src/httpd-2.4.65/build/rules.mk:75: all-recursive] Error 1

安装expat-devel包:

代码语言:javascript
复制
1yum install-y expat-devel

重新执行configure:

代码语言:javascript
复制
1# 再次执行make之前先清理之前的操作
2make clean
3
4./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event

重新执行make:

代码语言:javascript
复制
1make-j$(nproc)&&makeinstall

总结编译过程:

代码语言:javascript
复制
1# 下载apr和apr-util包,解压并移动到相应目录
2wget https://mirrors.cloud.tencent.com/apache/apr/apr-1.7.6.tar.gz
3wget https://mirrors.cloud.tencent.com/apache/apr/apr-util-1.6.3.tar.gz
4
5tar xf apr-1.7.6.tar.gz
6tar xf apr-util-1.6.3.tar.gz
7
8mv apr-1.7.6 httpd-2.4.65/srclib/apr
9mv apr-util-1.6.3 httpd-2.4.65/srclib/apr-util
10
11# 安装依赖包
12yum install-y expat-devel
13
14# 进入httpd包解压的目录
15cd httpd-2.4.65
16
17# 执行configure
18./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
19
20# 执行make
21make-j$(nproc)&&makeinstall
2.3.2.4 openSUSE Leap 15

进入httpd包解压的目录:

代码语言:javascript
复制
1cd httpd-2.4.65

执行configure:

代码语言:javascript
复制
1./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
2...
3configure: error: Bundled APR requested but not found at ./srclib/. Download and unpack the corresponding apr and apr-util packages to ./srclib/. # 提示,配置:错误:请求了捆绑的APR,但在./srclib/中未找到。请下载并解压相应的apr和apr-util包到./srclib/。

下载apr和apr-util包,解压并移动到相应目录:

代码语言:javascript
复制
1cd..
2
3wget https://mirrors.cloud.tencent.com/apache/apr/apr-1.7.6.tar.gz
4wget https://mirrors.cloud.tencent.com/apache/apr/apr-util-1.6.3.tar.gz
5
6tar xf apr-1.7.6.tar.gz
7tar xf apr-util-1.6.3.tar.gz
8
9mv apr-1.7.6 httpd-2.4.65/srclib/apr
10mv apr-util-1.6.3 httpd-2.4.65/srclib/apr-util

进入httpd包解压的目录:

代码语言:javascript
复制
1cd httpd-2.4.65

继续执行configure:

代码语言:javascript
复制
1./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
2...
3checking for gcc... no # 提示,没有gcc
4checking for cc... no
5checking for cl.exe... no
6checking for clang... no
7configure: error: in'/usr/local/src/httpd-2.4.65/srclib/apr':
8configure: error: no acceptable C compiler found in$PATH
9See 'config.log'formore details
10configure failed for srclib/apr

安装gcc包:

代码语言:javascript
复制
1zypperinstall-y gcc

继续执行configure:

代码语言:javascript
复制
1./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
2...
3configure: error: pcre(2)-config for libpcre not found. PCRE is required and available from http://pcre.org/
4# 提示,没有pcre

安装pcre2-devel包:

代码语言:javascript
复制
1zypperinstall-y  pcre2-devel

继续执行configure:

代码语言:javascript
复制
1./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
2...
3checking whether to enable mod_ssl... configure: error: mod_ssl has been requested but can not be built due to prerequisite failures # 提示,没有mod_ssl

安装openssl-devel包:

代码语言:javascript
复制
1zypperinstall-y openssl-devel

继续执行configure:

代码语言:javascript
复制
1./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
2...
3config.status: creating test/pyhttpd/config.ini
4config.status: creating docs/conf/httpd.conf
5config.status: creating docs/conf/extra/httpd-autoindex.conf
6config.status: creating docs/conf/extra/httpd-dav.conf
7config.status: creating docs/conf/extra/httpd-default.conf
8config.status: creating docs/conf/extra/httpd-info.conf
9config.status: creating docs/conf/extra/httpd-languages.conf
10config.status: creating docs/conf/extra/httpd-manual.conf
11config.status: creating docs/conf/extra/httpd-mpm.conf
12config.status: creating docs/conf/extra/httpd-multilang-errordoc.conf
13config.status: creating docs/conf/extra/httpd-ssl.conf
14config.status: creating docs/conf/extra/httpd-userdir.conf
15config.status: creating docs/conf/extra/httpd-vhosts.conf
16config.status: creating docs/conf/extra/proxy-html.conf
17config.status: creating include/ap_config_layout.h
18config.status: creating support/apxs
19config.status: creating support/apachectl
20config.status: creating support/dbmmanage
21config.status: creating support/envvars-std
22config.status: creating support/log_server_status
23config.status: creating support/logresolve.pl
24config.status: creating support/phf_abuse_log.cgi
25config.status: creating support/split-logfile
26config.status: creating build/rules.mk
27config.status: creating build/pkg/pkginfo
28config.status: creating build/config_vars.sh
29config.status: creating include/ap_config_auto.h
30config.status: executing default commands
31configure: summary of build options:
32
33    Server Version: 2.4.65
34    Install prefix: /apps/httpd
35    C compiler:     gcc
36    CFLAGS:          -g-O2
37    CPPFLAGS:        -DLINUX-D_REENTRANT-D_GNU_SOURCE
38    LDFLAGS:
39    LIBS:
40    C preprocessor: gcc -E

执行make:

代码语言:javascript
复制
1zypperinstall-ymake
2
3make-j$(nproc)&&makeinstall
4...
5httpd-2.4.65/srclib/apr-util/include/private  -I/usr/local/src/httpd-2.4.65/srclib/apr/include    -o xml/apr_xml.lo -c xml/apr_xml.c &&touch xml/apr_xml.lo
6xml/apr_xml.c:35:10: fatal error: expat.h: No such file or directory # 提示,缺少expat.h文件
735|#include
8|          ^~~~~~~~~
9compilation terminated.
10make[3]: *** [/usr/local/src/httpd-2.4.65/srclib/apr-util/build/rules.mk:207: xml/apr_xml.lo] Error 1
11make[3]: *** Waiting for unfinished jobs....
12make[3]: Leaving directory '/usr/local/src/httpd-2.4.65/srclib/apr-util'
13make[2]: *** [/usr/local/src/httpd-2.4.65/srclib/apr-util/build/rules.mk:119: all-recursive] Error 1
14make[2]: Leaving directory '/usr/local/src/httpd-2.4.65/srclib/apr-util'
15make[1]: *** [/usr/local/src/httpd-2.4.65/build/rules.mk:75: all-recursive] Error 1
16make[1]: Leaving directory '/usr/local/src/httpd-2.4.65/srclib'
17make: *** [/usr/local/src/httpd-2.4.65/build/rules.mk:75: all-recursive] Error 1

安装libexpat-devel包:

代码语言:javascript
复制
1zypperinstall-y libexpat-devel

重新执行configure:

代码语言:javascript
复制
1# 再次执行make之前先清理之前的操作
2make clean
3
4./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event

重新执行make:

代码语言:javascript
复制
1make-j$(nproc)&&makeinstall

总结编译过程:

代码语言:javascript
复制
1# 下载apr和apr-util包,解压并移动到相应目录
2wget https://mirrors.cloud.tencent.com/apache/apr/apr-1.7.6.tar.gz
3wget https://mirrors.cloud.tencent.com/apache/apr/apr-util-1.6.3.tar.gz
4
5tar xf apr-1.7.6.tar.gz
6tar xf apr-util-1.6.3.tar.gz
7
8mv apr-1.7.6 httpd-2.4.65/srclib/apr
9mv apr-util-1.6.3 httpd-2.4.65/srclib/apr-util
10
11# 安装依赖包
12zypperinstall-y gcc pcre2-devel openssl-devel make libexpat-devel
13
14# 进入httpd包解压的目录
15cd httpd-2.4.65
16
17# 执行configure
18./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
19
20# 执行make
21make-j$(nproc)&&makeinstall
2.3.2.5 Ubuntu Server 18.04/20.04/22.04/24.04 LTS、Debian 11/12/13

进入httpd包解压的目录:

代码语言:javascript
复制
1cd httpd-2.4.65

执行configure:

代码语言:javascript
复制
1./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
2...
3configure: error: Bundled APR requested but not found at ./srclib/. Download and unpack the corresponding apr and apr-util packages to ./srclib/. # 提示,配置:错误:请求了捆绑的APR,但在./srclib/中未找到。请下载并解压相应的apr和apr-util包到./srclib/。

下载apr和apr-util包,解压并移动到相应目录:

代码语言:javascript
复制
1cd..
2
3wget https://mirrors.cloud.tencent.com/apache/apr/apr-1.7.6.tar.gz
4wget https://mirrors.cloud.tencent.com/apache/apr/apr-util-1.6.3.tar.gz
5
6tar xf apr-1.7.6.tar.gz
7tar xf apr-util-1.6.3.tar.gz
8
9mv apr-1.7.6 httpd-2.4.65/srclib/apr
10mv apr-util-1.6.3 httpd-2.4.65/srclib/apr-util

进入httpd包解压的目录:

代码语言:javascript
复制
1cd httpd-2.4.65

继续执行configure:

代码语言:javascript
复制
1./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
2...
3checking for gcc... no # 提示,没有gcc
4checking for cc... no
5checking for cl.exe... no
6checking for clang... no
7configure: error: in'/usr/local/src/httpd-2.4.65/srclib/apr':
8configure: error: no acceptable C compiler found in$PATH
9See 'config.log'formore details
10configure failed for srclib/apr

安装gcc包:

代码语言:javascript
复制
1aptinstall-y gcc

继续执行configure:

代码语言:javascript
复制
1./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
2...
3configure: error: pcre(2)-config for libpcre not found. PCRE is required and available from http://pcre.org/
4# 提示,没有pcre

安装libpcre2-dev包:

代码语言:javascript
复制
1aptinstall-y libpcre2-dev

继续执行configure:

代码语言:javascript
复制
1./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
2...
3checking whether to enable mod_ssl... configure: error: mod_ssl has been requested but can not be built due to prerequisite failures # 提示,没有mod_ssl

安装libssl-dev包:

代码语言:javascript
复制
1aptinstall-y libssl-dev

继续执行configure:

代码语言:javascript
复制
1./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
2...
3config.status: creating test/pyhttpd/config.ini
4config.status: creating docs/conf/httpd.conf
5config.status: creating docs/conf/extra/httpd-autoindex.conf
6config.status: creating docs/conf/extra/httpd-dav.conf
7config.status: creating docs/conf/extra/httpd-default.conf
8config.status: creating docs/conf/extra/httpd-info.conf
9config.status: creating docs/conf/extra/httpd-languages.conf
10config.status: creating docs/conf/extra/httpd-manual.conf
11config.status: creating docs/conf/extra/httpd-mpm.conf
12config.status: creating docs/conf/extra/httpd-multilang-errordoc.conf
13config.status: creating docs/conf/extra/httpd-ssl.conf
14config.status: creating docs/conf/extra/httpd-userdir.conf
15config.status: creating docs/conf/extra/httpd-vhosts.conf
16config.status: creating docs/conf/extra/proxy-html.conf
17config.status: creating include/ap_config_layout.h
18config.status: creating support/apxs
19config.status: creating support/apachectl
20config.status: creating support/dbmmanage
21config.status: creating support/envvars-std
22config.status: creating support/log_server_status
23config.status: creating support/logresolve.pl
24config.status: creating support/phf_abuse_log.cgi
25config.status: creating support/split-logfile
26config.status: creating build/rules.mk
27config.status: creating build/pkg/pkginfo
28config.status: creating build/config_vars.sh
29config.status: creating include/ap_config_auto.h
30config.status: executing default commands
31configure: summary of build options:
32
33    Server Version: 2.4.65
34    Install prefix: /apps/httpd
35    C compiler:     gcc
36    CFLAGS:          -g-O2
37    CPPFLAGS:        -DLINUX-D_REENTRANT-D_GNU_SOURCE
38    LDFLAGS:
39    LIBS:
40    C preprocessor: gcc -E

执行make:

代码语言:javascript
复制
1aptinstall-ymake
2
3make-j$(nproc)&&makeinstall
4...
5httpd-2.4.65/srclib/apr-util/include/private  -I/usr/local/src/httpd-2.4.65/srclib/apr/include    -o xml/apr_xml.lo -c xml/apr_xml.c &&touch xml/apr_xml.lo
6xml/apr_xml.c:35:10: fatal error: expat.h: No such file or directory # 提示,缺少expat.h文件
735|#include
8|          ^~~~~~~~~
9compilation terminated.
10make[3]: *** [/usr/local/src/httpd-2.4.65/srclib/apr-util/build/rules.mk:207: xml/apr_xml.lo] Error 1
11make[3]: *** Waiting for unfinished jobs....
12make[3]: Leaving directory '/usr/local/src/httpd-2.4.65/srclib/apr-util'
13make[2]: *** [/usr/local/src/httpd-2.4.65/srclib/apr-util/build/rules.mk:119: all-recursive] Error 1
14make[2]: Leaving directory '/usr/local/src/httpd-2.4.65/srclib/apr-util'
15make[1]: *** [/usr/local/src/httpd-2.4.65/build/rules.mk:75: all-recursive] Error 1
16make[1]: Leaving directory '/usr/local/src/httpd-2.4.65/srclib'
17make: *** [/usr/local/src/httpd-2.4.65/build/rules.mk:75: all-recursive] Error 1

安装libexpat1-dev包:

代码语言:javascript
复制
1aptinstall-y libexpat1-dev

重新执行configure:

代码语言:javascript
复制
1# 再次执行make之前先清理之前的操作
2make clean
3
4./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event

重新执行make:

代码语言:javascript
复制
1make-j$(nproc)&&makeinstall

总结编译过程:

代码语言:javascript
复制
1# 下载apr和apr-util包,解压并移动到相应目录
2wget https://mirrors.cloud.tencent.com/apache/apr/apr-1.7.6.tar.gz
3wget https://mirrors.cloud.tencent.com/apache/apr/apr-util-1.6.3.tar.gz
4
5tar xf apr-1.7.6.tar.gz
6tar xf apr-util-1.6.3.tar.gz
7
8mv apr-1.7.6 httpd-2.4.65/srclib/apr
9mv apr-util-1.6.3 httpd-2.4.65/srclib/apr-util
10
11# 安装依赖包
12aptinstall-y gcc libpcre2-dev libssl-dev make libexpat1-dev
13
14# 进入httpd包解压的目录
15cd httpd-2.4.65
16
17# 执行configure
18./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
19
20# 执行make
21make-j$(nproc)&&makeinstall

2.3.3 创建用户和组

代码语言:javascript
复制
1# Rocky、Almalinux、CentOS、openEuler、AnolisOS、OpenCloudOS、 Kylin Server、UOS Server、Ubuntu、Debian
2useradd-s /sbin/nologin -r apache
3
4# openSUSE
5groupadd-r apache
6useradd-s /sbin/nologin -r-g apache apache

2.3.4 指定运行httpd的用户

代码语言:javascript
复制
1sed-i's/daemon/apache/' /apps/httpd/conf/httpd.conf

2.3.5 设置环境变量

代码语言:javascript
复制
1echo"PATH=/apps/httpd/bin:$PATH"> /etc/profile.d/httpd.sh
2. /etc/profile.d/httpd.sh

2.3.6 准备启动脚本并启动服务

代码语言:javascript
复制
1# Rocky、Almalinux、CentOS、openEuler、AnolisOS、OpenCloudOS、 Kylin Server、UOS Server、openSUSE
2cat> /usr/lib/systemd/system/httpd.service <<-EOF
3[Unit]
4Description=The Apache HTTP Server
5After=network.target remote-fs.target nss-lookup.target
6Documentation=man:httpd(8)
7Documentation=man:apachectl(8)
8
9[Service]
10Type=forking
11ExecStart=/apps/httpd/bin/apachectl start
12ExecReload=/apps/httpd/bin/apachectl graceful
13ExecStop=/apps/httpd/bin/apachectl stop
14KillSignal=SIGCONT
15PrivateTmp=true
16
17[Install]
18WantedBy=multi-user.target
19EOF
20
21# Ubuntu和Debian
22cat> /lib/systemd/system/httpd.service <<-EOF
23[Unit]
24Description=The Apache HTTP Server
25After=network.target remote-fs.target nss-lookup.target
26Documentation=man:httpd(8)
27Documentation=man:apachectl(8)
28
29[Service]
30Type=forking
31ExecStart=/apps/httpd/bin/apachectl start
32ExecReload=/apps/httpd/bin/apachectl graceful
33ExecStop=/apps/httpd/bin/apachectl stop
34KillSignal=SIGCONT
35PrivateTmp=true
36
37[Install]
38WantedBy=multi-user.target
39EOF
40
41systemctl daemon-reload && systemctl enable--now httpd

2.3.7 验证Httpd

代码语言:javascript
复制
1[root@rocky10 httpd-2.4.65]# ss -ntl |grep 80
2LISTEN 0511                *:80              *:*
3
4[root@rocky10 httpd-2.4.65]# httpd -v
5Server version: Apache/2.4.65 (Unix)
6Server built:   Sep 23202517:37:36

2.3.8 一键安装Httpd源码编译的脚本

Shell脚本源码地址:

Gitee:https://gitee.com/raymond9/shell

Github:https://github.com/raymond999999/shell

可以去上面的Gitee或Github代码仓库拉取脚本。

代码语言:javascript
复制
1[root@rocky10 ~]# cat install_httpd_source.sh
2#!/bin/bash
3#
4#**********************************************************************************
5#Author:        Raymond
6#QQ:            88563128
7#MP:            Raymond运维
8#Date:          2025-09-24
9#FileName:      install_httpd_source.sh
10#URL:           https://wx.zsxq.com/group/15555885545422
11#Description:   The mysql source script install supports 
12#               “Rocky Linux 8, 9 and 10, AlmaLinux 8, 9 and 10, CentOS 7, 
13#               CentOS Stream 8, 9 and 10, openEuler 22.03 and 24.03 LTS, 
14#               AnolisOS 8 and 23, OpenCloudOS 8 and 9, Kylin Server v10 and v11, 
15#               UOS Server v20, Ubuntu Server 18.04, 20.04, 22.04 and 24.04 LTS,  
16#               Debian 11 , 12 and 13, openSUSE Leap 15“ operating systems.
17#Copyright (C): 2025 All rights reserved
18#**********************************************************************************
19COLOR="echo -e \\033[01;31m"
20END='\033[0m'
21
22os(){
23. /etc/os-release
24MAIN_NAME=`sed-rn'/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
25if[${MAIN_NAME}=="Kylin"];then
26MAIN_VERSION_ID=`sed-rn'/^VERSION_ID=/s@.*="([[:alpha:]]+)(.*)"$@\2@p' /etc/os-release`
27else
28MAIN_VERSION_ID=`sed-rn'/^VERSION_ID=/s@.*="?([0-9]+)\.?.*"?@\1@p' /etc/os-release`
29fi
30if[${MAIN_NAME}=="Ubuntu"-o${MAIN_NAME}=="Debian"];then
31FULL_NAME="${PRETTY_NAME}"
32elif[${MAIN_NAME}=="UOS"];then
33FULL_NAME="${NAME}"
34else
35FULL_NAME="${NAME}${VERSION_ID}"
36fi
37}
38
39os
40SRC_DIR=/usr/local/src
41INSTALL_DIR=/apps/httpd
42APR_URL=https://mirrors.cloud.tencent.com/apache/apr/
43APR_FILE=apr-1.7.6.tar.gz
44APR_UTIL_URL=https://mirrors.cloud.tencent.com/apache/apr/
45APR_UTIL_FILE=apr-util-1.6.3.tar.gz
46HTTPD_URL=https://mirrors.cloud.tencent.com/apache/httpd/
47HTTPD_FILE=httpd-2.4.65.tar.gz
48MPM=event
49
50check_file(){
51cd${SRC_DIR}
52if[${MAIN_NAME}=="Rocky"-o${MAIN_NAME}=="AlmaLinux"-o${MAIN_NAME}=="CentOS"-o${MAIN_NAME}=="Anolis"-o${MAIN_NAME}=="OpenCloudOS"-o${MAIN_NAME}=="Kylin"];then
53rpm-qwget&> /dev/null ||{${COLOR}"安装wget工具,请稍等......"${END};yum -yinstallwget&> /dev/null;}
54fi
55if[!-e${APR_FILE}];then
56${COLOR}"缺少${APR_FILE}文件!"${END}
57${COLOR}"开始下载${APR_FILE}源码包......"${END}
58wget${APR_URL}${APR_FILE}||{${COLOR}"下载${APR_FILE}源码包下载失败!"${END};exit;}
59else
60${COLOR}"${APR_FILE}文件已准备好!"${END}
61fi
62if[!-e${APR_UTIL_FILE}];then
63${COLOR}"缺少${APR_UTIL_FILE}文件!"${END}
64${COLOR}"开始下载${APR_UTIL_FILE}源码包......"${END}
65wget${APR_UTIL_URL}${APR_UTIL_FILE}||{${COLOR}"下载${APR_UTIL_FILE}源码包下载失败!"${END};exit;}
66else
67${COLOR}"${APR_UTIL_FILE}文件已准备好!"${END}
68fi
69if[!-e${HTTPD_FILE}];then
70${COLOR}"缺少${HTTPD_FILE}文件!"${END}
71${COLOR}"开始下载${HTTPD_FILE}源码包......"${END}
72wget${HTTPD_URL}${HTTPD_FILE}||{${COLOR}"下载${HTTPD_FILE}源码包下载失败!"${END};exit;}
73else
74${COLOR}"${HTTPD_FILE}文件已准备好!"${END}
75fi
76}
77
78install_httpd(){
79[-d${INSTALL_DIR}]&&{${COLOR}"Httpd已存在,安装失败!"${END};exit;}
80${COLOR}"开始安装Httpd......"${END}
81${COLOR}"开始安装Httpd依赖包,请稍等......"${END}
82if[${MAIN_NAME}=="openSUSE"];then
83zypperinstall-y gcc pcre2-devel openssl-devel make libexpat-devel &> /dev/null
84elif[${MAIN_NAME}=="Ubuntu"-o${MAIN_NAME}=="Debian"];then
85apt update &> /dev/null;aptinstall-y gcc libpcre2-dev libssl-dev make libexpat1-dev
86else
87        yum install-y gcc pcre2-devel openssl-devel make expat-devel &> /dev/null
88fi
89if[${MAIN_NAME}=="openEuler"];then
90if[${MAIN_VERSION_ID}==22-o${MAIN_VERSION_ID}==24];then
91            yum install-ytar&> /dev/null
92fi
93fi
94if[${MAIN_NAME}=="Anolis"];then
95if[${MAIN_VERSION_ID}==23];then
96            yum install-ytar&> /dev/null
97fi
98fi
99if[${MAIN_NAME}=="OpenCloudOS"];then
100if[${MAIN_VERSION_ID}==9];then
101            yum install-ytar&> /dev/null
102fi
103fi
104tar xf ${APR_FILE}&&tar xf ${APR_UTIL_FILE}&&tar xf ${HTTPD_FILE}
105APR_FILE_DIR=`echo ${APR_FILE}_|sed-nr's/^(.*[0-9]).*/\1/p'`
106APR_UTIL_FILE_DIR=`echo ${APR_UTIL_FILE}_|sed-nr's/^(.*[0-9]).*/\1/p'`
107HTTPD_FILE_DIR=`echo ${HTTPD_FILE}_|sed-nr's/^(.*[0-9]).*/\1/p'`
108mv${APR_FILE_DIR}${HTTPD_FILE_DIR}/srclib/apr
109mv${APR_UTIL_FILE_DIR}${HTTPD_FILE_DIR}/srclib/apr-util
110cd${HTTPD_FILE_DIR}
111    ./configure --prefix=${INSTALL_DIR} --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=${MPM}
112make-j$(nproc)&&makeinstall
113[$?-eq0]&&$COLOR"Httpd编译安装成功!"$END||{$COLOR"Httpd编译安装失败,退出!"$END;exit;}
114if[${MAIN_NAME}=="openSUSE"];then
115id apache &> /dev/null ||{groupadd-r apache &&useradd-s /sbin/nologin -r-g apache apache;${COLOR}"成功创建apache用户!"${END};}
116else
117id apache &> /dev/null ||{useradd-s /sbin/nologin -r apache ;${COLOR}"成功创建apache用户!"${END};}
118fi
119sed-i's/daemon/apache/'${INSTALL_DIR}/conf/httpd.conf
120echo"PATH=${INSTALL_DIR}/bin:$PATH"> /etc/profile.d/httpd.sh
121. /etc/profile.d/httpd.sh
122if[${MAIN_NAME}=="Ubuntu"-o${MAIN_NAME}=="Debian"];then
123cat> /lib/systemd/system/httpd.service <<-EOF
124[Unit]
125Description=The Apache HTTP Server
126After=network.target remote-fs.target nss-lookup.target
127Documentation=man:httpd(8)
128Documentation=man:apachectl(8)
129
130[Service]
131Type=forking
132ExecStart=${INSTALL_DIR}/bin/apachectl start
133ExecReload=${INSTALL_DIR}/bin/apachectl graceful
134ExecStop=${INSTALL_DIR}/bin/apachectl stop
135KillSignal=SIGCONT
136PrivateTmp=true
137
138[Install]
139WantedBy=multi-user.target
140EOF
141else
142cat> /usr/lib/systemd/system/httpd.service <<-EOF
143[Unit]
144Description=The Apache HTTP Server
145After=network.target remote-fs.target nss-lookup.target
146Documentation=man:httpd(8)
147Documentation=man:apachectl(8)
148
149[Service]
150Type=forking
151ExecStart=${INSTALL_DIR}/bin/apachectl start
152ExecReload=${INSTALL_DIR}/bin/apachectl graceful
153ExecStop=${INSTALL_DIR}/bin/apachectl stop
154KillSignal=SIGCONT
155PrivateTmp=true
156
157[Install]
158WantedBy=multi-user.target
159EOF
160fi
161    systemctl daemon-reload && systemctl enable--now httpd &> /dev/null
162    systemctl is-active httpd &> /dev/null ||{${COLOR}"Httpd启动失败,退出!"${END};exit;}
163${COLOR}"${FULL_NAME}操作系统,Httpd安装完成!"${END}
164}
165
166main(){
167    check_file
168    install_httpd
169}
170
171if[${MAIN_NAME}=="Rocky"];then
172if[${MAIN_VERSION_ID}==8-o${MAIN_VERSION_ID}==9-o${MAIN_VERSION_ID}==10];then
173        main
174fi
175elif[${MAIN_NAME}=="AlmaLinux"];then
176if[${MAIN_VERSION_ID}==8-o${MAIN_VERSION_ID}==9-o${MAIN_VERSION_ID}==10];then
177        main
178fi
179elif[${MAIN_NAME}=="CentOS"];then
180if[${MAIN_VERSION_ID}==7-o${MAIN_VERSION_ID}==8-o${MAIN_VERSION_ID}==9-o${MAIN_VERSION_ID}==10];then
181        main
182fi
183elif[${MAIN_NAME}=="openEuler"];then
184if[${MAIN_VERSION_ID}==22-o${MAIN_VERSION_ID}==24];then
185        main
186fi
187elif[${MAIN_NAME}=="Anolis"];then
188if[${MAIN_VERSION_ID}==8-o${MAIN_VERSION_ID}==23];then
189        main
190fi
191elif[${MAIN_NAME}=='OpenCloudOS'];then
192if[${MAIN_VERSION_ID}==8-o${MAIN_VERSION_ID}==9];then
193        main
194fi
195elif[${MAIN_NAME}=="Kylin"];then
196if[${MAIN_VERSION_ID}==10-o${MAIN_VERSION_ID}==11];then
197        main
198fi
199elif[${MAIN_NAME}=="UOS"];then
200if[${MAIN_VERSION_ID}==20];then
201        main
202fi
203elif[${MAIN_NAME}=="openSUSE"];then
204if[${MAIN_VERSION_ID}==15];then
205        main
206fi
207elif[${MAIN_NAME}=="Ubuntu"];then
208if[${MAIN_VERSION_ID}==18-o${MAIN_VERSION_ID}==20-o${MAIN_VERSION_ID}==22-o${MAIN_VERSION_ID}==24];then
209        main
210fi
211elif[${MAIN_NAME}=='Debian'];then
212if[${MAIN_VERSION_ID}==11-o${MAIN_VERSION_ID}==12-o${MAIN_VERSION_ID}==13];then
213        main
214fi
215else
216${COLOR}"此脚本不支持${FULL_NAME}操作系统!"${END}
217fi

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2.3 源码编译安装
    • 2.3.1 下载并解压缩源码包
    • 2.3.2 源码编译安装
      • 2.3.2.1 Rocky 9/10、AlmaLinux 9/10、CentOS 7、CentOS Stream 9/10、openEuler 24.03 LTS、AnolisOS 23、OpenCloudOS 9、Kylin Server V11
      • 2.3.2.2 Rocky 8、AlmaLinux 8、CentOS Stream 8、openEuler 22.03 LTS、AnolisOS 8、OpenCloudOS 8、Kylin Server V10
      • 2.3.2.3 UOS Server V20
      • 2.3.2.4 openSUSE Leap 15
      • 2.3.2.5 Ubuntu Server 18.04/20.04/22.04/24.04 LTS、Debian 11/12/13
    • 2.3.3 创建用户和组
    • 2.3.4 指定运行httpd的用户
    • 2.3.5 设置环境变量
    • 2.3.6 准备启动脚本并启动服务
    • 2.3.7 验证Httpd
    • 2.3.8 一键安装Httpd源码编译的脚本
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档