前言

本文主要针对NGINX+PHP的安装部署及大致配置文件原理知识,所有配置基于前文同系列配置进行配置修改增删,不再赘述NGINX安装部署及https配置,有需要可翻前文查阅
NGINX+PHP是较为常见的websever架构模式,Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。

PHP安装及部署

1.下载安装包(到php官网www.php.net查找官网安装包)
wget http://museum.php.net/php5/php-5.4.3.tar.bz2
    tar -xjvf php-5.4.3.tar.bz2
解压时遇到报错(如图)
tar (child): bzip2: Cannot exec: No such file or directory
image.png
该报错是由于没有安装bzip2包导致,所以执行一下安装即可
yum -y install bzip2
然后再次解压,就可以解压了。
2.编译安装php
cd  php-5.4.3
    ./configure --prefix=/usr/local/php  --enable-fpm --with-mcrypt --enable-mbstring --disable-pdo --with-curl --disable-debug  --disable-rpath --enable-inline-optimization --with-bz2  --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli
报错提示如下图,缺少libxml2库
image.png
对症下药,安装libxml2库
yum   install   libxml2-devel
出现如下报错
image.png
继续安装缺少的BZIP2库
yum   install   bzip2-devel
image.png
继续安装缺乏的curl库
yum -y install curl-devel
image.png
继续安装缺少的libmcrypt库
yum install -y libmcrypt-devel
但是出现如下报错
image.png
是因为libmcrypt是存在版权问题 centos没有直接的包,所以要单独下载编译,如下
wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/attic/libmcrypt/libmcrypt-2.5.7.tar.gz
    tar -zxvf libmcrypt-2.5.7.tar.gz
    cd libmcrypt-2.5.7
    ./configure  –prefix=/usr/local
    make
    make install
重新cd  php-5.4.3
然后执行编译及安装
执行make的时候报错如下
image.png
该报错原因是因为早期zend支持32位不支持64位,所以会出现这个报错
需要打个补丁才可以
curl -o php-5.4.3.patch https://mail.gnome.org/archives/xml/2012-August/txtbgxGXAvz4N.txt
    cd php-5.4.3
    patch -p0 -b < ./php-5.4.3.patch
此处参考资料:
报错如下:
image.png
vi Mkefile
在这个位置(大概77行左右)最后面加上-liconv
image.png
修改后如下图
image.png
清理一下make缓存
make clean
然后make了
发现报错如下
image.png
这个目测看了一下 查阅了相关资料  应该是libiconv没有安装导致
这边先尝试安装一下libiconv
cd  ~/soft/
    yum -y install libevent-devel
    wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz
    tar -zxvf libiconv-1.15.tar.gz
    cd libiconv-1.15
    ./configure --prefix=/usr/local/libiconv
    make
    make install
安装完成后再次运行,依旧是一样的报错
image.png
这可咋办
有提到一个可能性:libiconv.so的软链接文件不对

于是,就先检查一下软链接文件,查看好像不太对,于是按照资料里的教程并结合自身目录情况调整了一下命令执行:

ln -s /usr/local/libiconv/lib/libiconv.so  /usr/lib/libiconv.so
然后执行完后,再次编译php
再次又出现新的报错,这安装个php还真是一波七八折
image.png
这个情况可能是:libiconv.so.2软链接问题
眼不眼熟。刚做完libiconv.so的软链接,现在又要做libiconv.so.2的软链接

命令如下:

ln -s /usr/local/libiconv/lib/libiconv.so.2  /usr/lib/libiconv.so.2
命令也是同样的味道
然后执行完后,再次编译php
还是一样的报错。惊了
image.png
这说明了上面那个软链接没有丝毫效果,那可怎么办呀
陷入了沉思
尝试重新添加动态链接库
vi /etc/ld.so.conf
    在"include ld.so.conf.d/*.conf"下方增加"/usr/local/lib"
    /sbin/ldconfig -v
尝试重新编译
提示
image.png
眼泪快掉下来了,为什么别人都这么顺利,我一波七八九折了都
查看新的报错,有个关键词“chmod”这说明了可能是权限方面的问题
不能访问ext/phar/phar.phar:找不到该文件或目录
这个文件真的不存在吗,我尝试find一下
image.png
陷入了究极的沉思,为什么会这样呢,为什么他不在ext里呢
于是,在查阅了一些资料:https://www.php.cn/php-weizijiaocheng-325426.html
我决定试试资料里写的
image.png
第一个文件是符合资料里的内容,尝试copy一下
cp /root/soft/php-5.4.3/ext/phar/phar.php /root/soft/php-5.4.3/ext/phar/phar.phar
然后make clean清理一下编译缓存
即可正常进行编译
make
    make install
配置文件部分
cp php.ini-development /usr/local/php/php.ini
    cp /usr/local/php/etc/php-fpm.conf.default   /usr/local/php/etc/php-fpm.conf
    cp sapi/fpm/php-fpm /usr/local/bin
修改php-fpm.conf配置文件,使用www用户和www用户组运行
groupadd www   #创建组
    useradd -M -g www www    #创建用户
    vim /usr/local/php/etc/php-fpm.conf
    #修改为以下
    ; Unix user/group of processes
    ; Note: The user is mandatory. If the group is not set, the default user's group
    ;       will be used.
    user = www
    group = www
image.png
修改php.ini,根据需求开启需要的php功能
vim /usr/local/php/php.ini
    ######################
    display_errors = On
    display_startup_errors = On
    fastcgi.impersonate = 1
    date.timezone = asia/Shanghai
    extension=php_mysql.dll
    extension=php_gd2.dll
    extension=php_mbstring.dll
姑且先开了这么多,后续有需要可以再修改php.ini开启需要的功能
启动php-fpm
/usr/local/bin/php-fpm
启动以后就可以看到对应进程了

image.png

配置NGINX的php支持

先对nginx的默认站点进行增加php支持
vim /usr/src/nginx/conf/nginx.conf
在location块增加默认首页index.php
image.png
配置nginx的php支持,以保证php请求会被发送到nginx处理(一样在同个文件)
location ~ \.php$ {
    root           html;   #网站目录地址
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /html$fastcgi_script_name;  #网站目录地址
    include        fastcgi_params;
    fastcgi_param  SCRIPT_NAME          $fastcgi_script_name;
    }
image.png
然后重启nginx
/usr/src/nginx/sbin/nginx -s reload
接前文(一)和(二)的配置
所以我要修改配置文件是vhost的配置文件
vim /usr/src/nginx/vhost/testhtml.conf
在location块增加 index.php
image.png
在文件server块内增加location块 指定php来源
location ~ \.php$ {
    root  /www/wwwroot/testhtml;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /www/wwwroot/testhtml$fastcgi_script_name;
    include        fastcgi_params;
    fastcgi_param  SCRIPT_NAME          $fastcgi_script_name;
    }
image.png
然后重启nginx
/usr/src/nginx/sbin/nginx -s reload
新增php测试文件在/www/wwwroot/testhtml
touch  /www/wwwroot/testhtml/index.php
    vim  /www/wwwroot/testhtml/index.php
文件内输入以下内容
<?php
    phpinfo();
    ?>
访问测试
image.png
???为什么会变成下载????
检查了一下php-fpm是正常运行并且端口也是正常监听
image.png
一脸楞逼的我思索了一下,下载=支持该格式但是没办法显示它
所以,可能是配置文件有问题
检查一下配置文件先
发现SSL部分好像没有配置
增加SSL部分的php支持配置
location / {
    root  /www/wwwroot/testhtml;
    index index.php index.html index.htm;
    }
    location ~ \.php$ {
    root  /www/wwwroot/testhtml;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /www/wwwroot/testhtml$fastcgi_script_name;
    include        fastcgi_params;
    fastcgi_param  SCRIPT_NAME          $fastcgi_script_name;
    }
image.png
重启一下nginx
/usr/src/nginx/sbin/nginx -s reload
再次测试
image.png
就可以顺利打开了
参考资料:
https://blog.csdn.net/weixin_41752294/article/details/90181805#_22
②https://www.php.net/manual/zh/install.unix.nginx.php
③https://www.ahaoyw.com/article/51.html
④其余见文中对应位置