本文首发于我的个人网站: https://hewanyue.com/
本文作者: Hechao
本文链接: https://hewanyue.com/blog/dcaccc5a.html
所谓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页面就可以正常访问了