源码编译安装httpd 2.4,提供系统服务管理脚本并测试(两种方法实现)

添加用户和组

root@localhost httpd-2.4.46# groupadd -r -g 48 apache

root@localhost httpd-2.4.46# useradd -r -u 48 -g 48 -c "Apache server" -s /sbin/nologin apache

1.下载源码

root@localhost \~# wget -c https://archive.apache.org/dist/httpd/httpd-2.4.46.tar.gz
2.解压

root@localhost \~# tar xf httpd-2.4.46.tar.gz -C /usr/local/src/

3.安装依赖

root@localhost httpd-2.4.46# yum install gcc gcc-c++ openssl-devel pcre-devel make -y
4、./configure

root@localhost \~# cd /usr/local/src/httpd-2.4.46/

root@localhost httpd-2.4.46# ./configure --prefix=/usr/local/apache --enable-so --enable-ssl

出现提示信息:

checking for APR... no

configure: error: APR not found. Please read the documentation.

root@localhost httpd-2.4.46# yum list | grep -i apr # 查询依赖安装包

root@localhost httpd-2.4.46# yum install apr-devel apr-util-devel -y
再重复./configure

root@localhost httpd-2.4.46# ./configure --prefix=/usr/local/apache --enable-so --enable-ssl

5、编译---make

6、安装 make install

方法一:使用systemctl服务文件

1、 创建/usr/lib/systemd/system/httpd.service 文件,并添加以下内容:

Unit

Description=The Apache HTTP Server

After=network.target

Service

Type=forking

PIDFile=/usr/local/apache/logs/httpd.pid

ExecStart=/usr/local/apache/bin/httpd -k start

ExecReload=/usr/local/apache/bin/httpd -k restart

ExecStop=/usr/local/apache/bin/httpd -k stop

PrivateTmp=true

Install

WantedBy=multi-user.target

2、测试

root@localhost httpd-2.4.46#vim /usr/local/apache/conf/httpd.conf #将用户和组改成系统用户

root@localhost httpd-2.4.46# systemctl daemon-reload #重新加载所有的单元文件

root@localhost httpd-2.4.46# systemctl start httpd.service #开启服务

为什么在源码安装Apache时需要创建用户和组?

因为使用系统默认的用户和组可能会带来安全风险。具体来说,使用系统默认的用户和组可能会导致以下问题:

  1. ‌权限问题‌:如果Apache以root用户运行,它将对系统拥有完全的控制权,这可能导致安全风险。通过创建一个专门的用户和组,可以限制Apache的权限,减少潜在的安全威胁。
  2. ‌资源管理‌:使用专门的用户和组可以更好地管理Apache进程的资源使用情况,避免对系统资源的不必要占用。
  3. ‌日志和错误处理‌:通过创建专门的用户和组,可以更方便地管理和查看Apache的日志文件和错误信息,有助于故障排查和维护。

方法二:使用 init.d 脚本

1、 参考、复制Apache官方提供的兼容RHEL6系统服务的脚本,并添加两行内容

root@localhost \~# cd /usr/local/apache/bin/

root@localhost bin# ls

ab checkgid envvars-std htdbm httpd rotatelogs
apachectl dbmmanage fcgistarter htdigest httxt2dbm

apxs envvars htcacheclean htpasswd logresolve

root@localhost bin# vim apachectl
root@localhost bin# cp apachectl /etc/init.d/httpd

#查看该文件是否有执行权限

root@localhost bin# ll /etc/init.d/httpd

-rwxr-xr-x 1 root root 3500 Jan 16 18:18 /etc/init.d/httpd

root@localhost bin# vim /etc/init.d/httpd

里面添加以下两行:

#chkconfig: 35 85 15
#description: Apache is an HTTP(S) server

2、添加成系统服务脚本、设置开机自启动 和测试

root@localhost bin# chkconfig --level 35 --add httpd

root@localhost bin# chkconfig --level 35 httpd on

root@localhost bin# ll /etc/init.d/httpd #查看是否有执行权限,没有则加

-rwxr-xr-x 1 root root 3504 Jan 16 19:51 /etc/init.d/httpd

root@localhost bin# chkconfig --level 35 httpd off #开机不自启动

root@localhost bin# chkconfig --level 35 --del httpd #删除

root@localhost bin# rm -rf /etc/init.d/httpd

注意:

1、 init.d 脚本必须位于 /etc/init.d/ 目录下;

2、脚本必须有执行权限;

3、 init.d 脚本可能不适用于所有系统,特别是那些默认使用 systemd 的系统。

相关推荐
星恒随风14 分钟前
MySQL 从零入门(五):MySQL 内置函数详解——日期、字符串、数学函数与实战案例
linux·数据库·笔记·sql·mysql
可乐ea3 小时前
智能体记忆该拆成几层:笔记、记忆表示与注入上下文
服务器·数据库·笔记·ai智能体·提示词工程·上下文工程·记忆系统
唐墨1235 小时前
linux kernel 比较数据大小的宏定义
linux·算法
程序开发阿元5 小时前
密码不进工具:一个独立开发者的服务器凭据管理办法
linux·ssh
分布式存储与RustFS7 小时前
群晖 NAS 被 C3RB3R 锁了:本地备份一起被加密,RustFS 对象锁为什么删不掉
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
真好啊又活了一天8 小时前
服务器和虚机配置IPV6
运维·服务器·github
zixu_star8 小时前
定时任务是什么?从日常自动化到 AI 应用,软件如何自动执行任务?
运维·人工智能·自动化
AR-26710-8 小时前
Linux Day33——定时任务+lvm
linux·运维
墨痕诉清风9 小时前
SSRF漏洞实战记录+OSS桶命令执行+MCP漏洞
linux·服务器·数据库
byte轻骑兵9 小时前
实战 4:BlueZ 源码中添加自定义设备过滤规则
linux·物联网·bluez·电脑蓝牙·嵌入式蓝牙