前置知识:
Rocky Linux 10.x编译安装nginx-1.28.x+mysql-8.4.x+php-8.4.x
https://www.osyunwei.com/archives/16714.html
安装包下载:
1、apache
https://dlcdn.apache.org/httpd/httpd-2.4.65.tar.gz
2、apr(Apache库文件)
https://dlcdn.apache.org//apr/apr-1.7.6.tar.gz
3、apr-util(Apache库文件)
https://dlcdn.apache.org//apr/apr-util-1.6.3.tar.gz
4、apache支持php模块
https://dlcdn.apache.org/httpd/mod_fcgid/mod_fcgid-2.3.9.tar.gz
安装apache:
1、安装编译工具包
yum install gcc make apr-devel apr-util-devel pcre2-devel openssl-devel
2、安装apr
cd /usr/local/src
tar zxvf apr-1.7.6.tar.gz
cd apr-1.7.6
./configure --prefix=/usr/local/apr
make -j$(nproc)
make install
3、安装apr-util
cd /usr/local/src
tar zxvf apr-util-1.6.3.tar.gz
cd apr-util-1.6.3
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make -j$(nproc)
make install
ls /usr/local/apr-util/lib/libaprutil-1.so
添加环境变量
export LD_LIBRARY_PATH=/usr/local/apr-util/lib:$LD_LIBRARY_PATH
4、安装apache
cd /usr/local/src
tar zxvf httpd-2.4.65.tar.gz
cd httpd-2.4.65
./configure \
--prefix=/usr/local/apache2 \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util \
--with-pcre \
--with-ssl=/usr \
--enable-mpms-shared=all \
--enable-rewrite \
--enable-ssl \
--enable-deflate \
--enable-headers \
--enable-expires \
--enable-proxy \
--enable-proxy-fcgi \
--enable-proxy-http \
--enable-proxy-balancer \
--enable-proxy-wstunnel \
--enable-cgi \
--enable-cgid \
--enable-status \
--enable-autoindex \
--enable-userdir \
--enable-alias \
--enable-dav \
--enable-dav-fs \
--enable-dav-lock \
--enable-suexec \
--enable-lbmethod_byrequests \
--enable-lbmethod_bytraffic \
--enable-lbmethod_bybusyness \
--enable-lbmethod_heartbeat \
--enable-http2
make -j$(nproc)
make install
/usr/local/apache2/bin/apachectl -k start #启动
/usr/local/apache2/bin/apachectl -k stop #关闭
./configure --help #查看编译参数
#使用systemd设置apache开机自启
vi /etc/systemd/system/httpd.service
[Unit]
Description=Apache HTTP Server
After=network.target
[Service]
Type=forking
Environment=HTTPD_MPM=event
ExecStart=/usr/local/apache2/bin/apachectl start
ExecStop=/usr/local/apache2/bin/apachectl stop
ExecReload=/usr/local/apache2/bin/apachectl graceful
PIDFile=/usr/local/apache2/logs/httpd.pid
[Install]
WantedBy=multi-user.target
:wq! #保存退出
systemctl daemon-reload
systemctl enable httpd
systemctl start httpd
vi /etc/profile #添加apache服务系统环境变量
在最后添加下面这一行
export PATH=$PATH:/usr/local/apache2/bin
:wq! #保存退出
source /etc/profile #使配置立即生效
cp /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf.bak
vi /usr/local/apache2/conf/httpd.conf #编辑配置文件
ServerName www.example.com:80 #取消前面的注释
:wq! #保存退出
配置apache支持php:
有三种方式可以让apache支持php,目前推荐的是第三种方式,前面两种方式可以了解下
1、mod_php(传统方式)
先安装apache,再安装php,编译php时添加--with-apxs2=/usr/local/apache2/bin/apxs 参数,生成 libphp.so 模块,并自动注册到 Apache
vi /usr/local/apache2/conf/httpd.conf #编辑apache配置文件
在AddType application/x-gzip .gz .tgz这一行下面添加、
AddType application/x-httpd-php .php (注意:php .php这个点前面有一个空格)
:wq! #保存退出
systemctl restart httpd #重启apahce
2、mod_fcgid
安装mod_fcgid模块
cd /usr/local/src
tar -zxvf mod_fcgid-2.3.9.tar.gz
cd mod_fcgid-2.3.9
APXS=/usr/local/apache2/bin/apxs ./configure.apxs
make
make install
vi /usr/local/apache2/conf/httpd.conf #编辑
#如果配置文件有下面这一行,就不用重复添加,一般安装完mod_fcgid模块后会自动添加
LoadModule fcgid_module modules/mod_fcgid.so
#在最后一行添加以下全局配置信息
<IfModule mod_fcgid.c>
# 设置超时时间
FcgidConnectTimeout 20
FcgidIOTimeout 40
FcgidBusyTimeout 60
FcgidMaxRequestLen 131072
# 最大进程数
FcgidMaxProcesses 10
FcgidMaxRequestsPerProcess 1000
# PHP-CGI 路径
FcgidWrapper "/usr/local/php84/bin/php-cgi" .php
AddHandler fcgid-script .php
</IfModule>
#找到<Directory "/usr/local/apache2/htdocs">这一段,在Options Indexes FollowSymLinks后面添加ExecCGI,支持php解析
Options Indexes FollowSymLinks ExecCGI
:wq! #保存退出
#重启apache
systemctl restart httpd
#也可以使用 Include 文件,添加全局配置
#创建一个公共配置文件
vi /usr/local/apache2/conf/php-shared.conf
# 共享的 PHP 支持配置
<IfModule mod_fcgid.c>
Options Indexes FollowSymLinks ExecCGI
AllowOverride All
Require all granted
</IfModule>
:wq! #保存退出
#然后在每个 虚拟主机 VirtualHost 中引用
<Directory "/var/www/site1">
Include conf/php-shared.conf
</Directory>
#Include这种相对路径写法,Apache 会从安装目录/usr/local/apache2开始查找
3、FastCGI (PHP-FPM)
Apache 不再直接运行 PHP,而是作为一个 反向代理,把 .php 请求转发给独立运行的 PHP-FPM 服务
# 检查模块文件是否存在
ls -l /usr/local/apache2/modules/mod_proxy_fcgi.so
vi /usr/local/apache2/conf/httpd.conf
#在文件中找到 LoadModule 区域,取消以下三行前面的注释
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_http_module modules/mod_proxy_http.so
# 添加到最后一行,共享使用,也可以单独加到每个 <VirtualHost> 内,实现多个php版本共存
# 配置 Apache 将 .php 请求代理到 PHP-FPM
# 启用对 .php 文件的处理
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9084"
</FilesMatch>
:wq! #保存退出
#检测配置文件是否正确
/usr/local/apache2/bin/apachectl configtest
systemctl restart httpd #重启apache
systemctl restart php84-fpm #重启php-fpm
apache支持php的三种方式比较:
1、mod_php 已过时,仅推荐用于旧系统维护或极简测试,安全性和性能均不如 FastCGI 方案
2、mod_fcgid进程管理不如 PHP-FPM 灵活,配置较复杂
3、FastCGI (PHP-FPM)是目前最推荐的方式
测试篇
cd /usr/local/apache2/htdocs
vi index.php #输入下面内容
<?php
phpinfo();
?>
:wq! #保存
chown daemon:daemon -R /usr/local/apache2/htdocs
chmod -R 700 /usr/local/apache2/htdocs
在客户端浏览器输入服务器IP地址,可以看到相关的配置信息
至此,Linux下编译安装Apache并支持php完成。



