源码编译Apache和PHP实现lamp架构

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/MicePro/article/details/102630720

本文首发于我的个人网站: https://hewanyue.com/
本文作者: Hechao
本文链接: https://hewanyue.com/blog/源码编译Apache和PHP实现lamp架构/

  所谓LAMP架构,是指:
    L:linux
    A:apache (httpd)
    M:mysql, mariadb
    (或M:memcached)
    P:php, perl, python
  WEB资源类型:
    静态资源:原始形式与响应内容一致,在客户端浏览器执行
    动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端

LAMP工作原理

在这里插入图片描述
  httpd:接收用户的web请求;静态资源则直接响应;动态资源为php脚本,对此类资源的请求将交由php来运行
  php:运行php程序
  MariaDB:数据管理系统

httpd与php结合的方式

1、modules (将php编译成为httpd的模块,默认方式)
MPM:
prefork: libphp5.so
event, worker: libphp5-zts.so
2、FastCGI

  本文将分别展示以模块方式以及FCGI的方式,源码编译apache、php、mariadb来实现LAMP架构。

编译部署

编译安装mariadb

  之前曾详细介绍,这里就不在赘述。

编译安装apache

  先安装依赖包yum install gcc pcre-devel openssl-devel expat-devel autoconf libtool gcc-c++
  下载apache源码包以及apr包

wget https://archive.apache.org/dist/httpd/httpd-2.4.39.tar.gz
wget https://www-us.apache.org/dist//apr/apr-1.7.0.tar.gz
wget https://www-us.apache.org/dist//apr/apr-util-1.6.1.tar.gz

  替换apr、apr-util文件

tar xf apr-1.7.0.tar.gz -C httpd-2.4.39/srclib/ 
tar xf apr-util-1.6.1.tar.gz -C httpd-2.4.39/srclib/ 
cd httpd-2.4.39/srclib/
mv apr-1.7.0 apr
mv apr-util-1.6.1 apr-util

  编译安装

./configure --prefix=/data/httpd24 \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork \
--with-included-apr
make -j 4 && make install

  写入PATH变量,并生效

vim /etc/profile.d/httpd.sh
#!/bin/bash
export PATH=/data/httpd24/bin:$PATH
source /etc/profile.d/httpd.sh

编译安装php

模块方式

  先安装依赖包

yum install -y libxml2-devel

  在官网下载php最新版php-7.3.10.tar.xz包并解压

wget https://www.php.net/distributions/php-7.3.10.tar.xz
tar xvf php-7.3.10.tar.xz
cd php-7.3.10.tar.xz
./configure --prefix=/data/php/ \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-openssl \
--with-pdo-mysql=mysqlnd \
--enable-mbstring \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--enable-xml \
--enable-sockets \
--with-apxs2=/data/httpd24/bin/apxs \
--with-config-file-path=/data/php/etc \
--with-config-file-scan-dir=/data/php/etc/php.d \
--enable-maintainer-zts \
--disable-fileinfo

  PS:如果apache是之前yum装的,很有可能没有apxs文件,只需要dnf install httpd-devel -y命令安装httpd-devel包,即可生成/usr/bin/apxs工具,如果是以前编译安装的,也要改为正确apxs2对应路径。
  编译安装

make -j 4 && make install

  复制配置文件模版至配置文件目录

cp php.ini-production /data/php/etc/php.ini

  修改apache配置文件,设置默认php页面,增加PHP模块

vim /etc/httpd/conf/httpd.conf
<IfModule dir_module>
    DirectoryIndex index.php index.html                #增加php页面
</IfModule>

----
<IfModule mime_module>

    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    
    AddType application/x-httpd-php .php                #增加模块
    AddType application/x-httpd-php-source .phps   #增加模块


</IfModule>

  添加php测试页

vim /data/httpd24/htdocs/index.php
<?php
phpinfo() 
?>

  重启apache服务

apachectl restart

  访问php测试页进行测试,便可看到php设置已经成功

curl HOSTIP
FCGI方式

  也要先安装依赖包

yum install libxml2-devel bzip2-devel libmcrypt-devel

  同样下载tar包,解压并进入编译目录
  开始编译安装

./configure --prefix=/data/php \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-openssl \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--enable-mbstring \
--enable-xml \
--enable-sockets \
--enable-fpm \
--enable-maintainer-zts \
--disable-fileinfo
 make -j 4 && make install

  复制模版文件当配置文件

cp /data/php-7.3.10/php.ini-production  /etc/php.ini

  因为php-fpm模式相当于单独的一个服务,将服务配置文件放至/usr/lib/systemd/system/目录

cp /data/php-7.3.10/sapi/fpm/php-fpm.service /usr/lib/systemd/system/

  生成fpm配置文件,并修改进程属主属组为apache

cd /data/php/etc
cp php-fpm.conf.default  php-fpm.conf
cd php-fpm.d/
cp www.conf.default www.conf
vim www.conf

user apache
group apache 

  加载配置文件并启动进程

systemctl daemon-reload
systemctl enable --now  php-fpm.service 

  修改配置httpd.conf 支持php-fpm
  取消下面两行的注释

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

  修改下面行

<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
加下面四行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/httpd24/htdocs/$1

  也可修改php监听端口9000 为socket路径,下面代理转发命令为为

ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ unix:/var/run/php-fpm/php-fpm.sock|fcgi://localhost/data/httpd24/htdocs/$1

  重启apache服务

apachectl restart

至此,php页面就可以正常访问了

猜你喜欢

转载自blog.csdn.net/MicePro/article/details/102630720