要求
centos 7 編譯安裝 httpd和 php 的 fpm 模式,實現 httpd 通過 socket 與 fpm 通信, 響應 phpinfo 信息頁面請求。
前言
- php兩種工作模式,一種是cgi,一種是fastcgi,fpm模式就是實現來實現fastcgi的。
- fpm模式,可以通過監聽ip的端口,來處理PHP請求,也可以通過socket來通信
- 編譯安裝http的時候需要注意 apr和apr-util的編譯。
- 腳本需求:需要把四個安裝包,放在與腳本同一目錄下
- apr-util-1.6.1.tar.gz
- apr-1.7.0.tar.gz
- httpd-2.4.25.tar.bz2
- php-7.3.12.tar.xz
- 可惜我還不知道以何種方式把 軟件安裝包也共享給你們,有需要聯繫我好了。或許以後可能搞個網盤啥的。
代碼
[root@localhost ~]#cat hp.sh
#!/bin/bash
#
#********************************************************************
#Author: liuhao
#QQ: 1921160095
#Date: 2019-12-26
#FileName: hp.sh
#Description: The test script
#Copyright (C): 2019 All rights reserved
#********************************************************************
# 判斷包是否在當前目錄
[ -e apr-1.7.0.tar.gz ] || { echo apr-1.7.0.tar.gz is no exists;exit 2; }
[ -e apr-util-1.6.1.tar.gz ] || { echo apr-util-1.6.1.tar.gz is no exists;exit 2; }
[ -e httpd-2.4.25.tar.bz2 ] || { echo httpd-2.4.25.tar.bz2 is no exists;exit 2; }
[ -e php-7.3.12.tar.xz ] || { echo php-7.3.12.tar.xz is no exists;exit 2; }
# 編譯安裝http
yum install gcc make pcre-devel openssl-devel expat-devel lbzip2 -y
mkdir /app/ -p
tar xf apr-1.7.0.tar.gz -C /app/
tar xf apr-util-1.6.1.tar.gz -C /app/
tar xf httpd-2.4.25.tar.bz2 -C /app/
mv /app/apr-1.7.0/ /app/httpd-2.4.25/srclib/apr
mv /app/apr-util-1.6.1/ /app/httpd-2.4.25/srclib/apr-util
cd /app/httpd-2.4.25/
./configure --prefix=/app/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
make
make install
useradd -s /sbin/nologin -r apache
sed -i '/User daemon/c User apache' /app/httpd24/conf/httpd.conf
sed -i '/Group daemon/c Group apache' /app/httpd24/conf/httpd.conf
# 編譯安裝php 7.3
yum install gcc libxml2-devel bzip2-devel libmcrypt-devel -y
cd -
tar xf php-7.3.12.tar.xz -C /app
cd /app/php-7.3.12
./configure --prefix=/app/php73 --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
make install
# 修改環境變量
echo 'PATH=/app/php73/bin:/app/httpd24/bin:$PATH' > /etc/profile.d/hp.sh
# 配置php配置文件
cp /app/php-7.3.12/php.ini-production /app/php73/etc/php.ini
cp /app/php-7.3.12/sapi/fpm/php-fpm.service /usr/lib/systemd/system/
cd /app/php73/etc/
cp php-fpm.conf.default php-fpm.conf
cp php-fpm.d/www.conf.default php-fpm.d/www.conf
sed -i '/^user /c user = apache' /app/php73/etc/php-fpm.d/www.conf
sed -i '/^group /c group = apache' /app/php73/etc/php-fpm.d/www.conf
sed -i '/^listen /c listen = /run/php-fpm.sock' /app/php73/etc/php-fpm.d/www.conf
sed -i '/^;listen.owner /c listen.owner = apache ' /app/php73/etc/php-fpm.d/www.conf
sed -i '/^;listen.group /c listen.group = apache ' /app/php73/etc/php-fpm.d/www.conf
sed -i '/^;listen.mode /c listen.mode = 0660 ' /app/php73/etc/php-fpm.d/www.conf
# 配置http與php聯動
sed -i 's/index.html/index.php index.html/' /app/httpd24/conf/httpd.conf
sed -i '/proxy_module/c LoadModule proxy_module modules/mod_proxy.so' /app/httpd24/conf/httpd.conf
sed -i '/proxy_fcgi/c LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so' /app/httpd24/conf/httpd.conf
echo "ProxyRequests Off" >> /app/httpd24/conf/httpd.conf
echo "ProxyPassMatch ^/(.*.php)$ unix:/run/php-fpm.sock|fcgi://localhost/app/httpd24/htdocs/" >> /app/httpd24/conf/httpd.conf
sed -i '/mime_module>/a AddType application/x-httpd-php .php' /app/httpd24/conf/httpd.conf
sed -i '/mime_module>/a AddType application/x-httpd-php-source .phps' /app/httpd24/conf/httpd.conf
# 加入index.php 設置phpinfo 內容頁
cat << ceshi > /app/httpd24/htdocs/index.php
<?php
phpinfo();
?>
ceshi
# 啓動php和http
systemctl daemon-reload
systemctl enable --now php-fpm.service
/app/httpd24/bin/apachectl start
[root@localhost ~]#