企业中web业务最常见的架构就是lamp架构、lnmp架构或者lnmt架构。本文将详细讲解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 HOSTIPFCGI方式
也要先安装依赖包
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页面就可以正常访问了

