前言
本文主要针对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


该报错是由于没有安装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库


对症下药,安装libxml2库
yum install libxml2-devel
出现如下报错


继续安装缺少的BZIP2库
yum install bzip2-devel


继续安装缺乏的curl库
yum -y install curl-devel


继续安装缺少的libmcrypt库
yum install -y libmcrypt-devel
但是出现如下报错


是因为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的时候报错如下


该报错原因是因为早期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
此处参考资料:
报错如下:


vi Mkefile
在这个位置(大概77行左右)最后面加上-liconv


修改后如下图


清理一下make缓存
make clean
然后make了
发现报错如下


这个目测看了一下 查阅了相关资料 应该是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
安装完成后再次运行,依旧是一样的报错


这可咋办
有提到一个可能性:libiconv.so的软链接文件不对
于是,就先检查一下软链接文件,查看好像不太对,于是按照资料里的教程并结合自身目录情况调整了一下命令执行:
ln -s /usr/local/libiconv/lib/libiconv.so /usr/lib/libiconv.so
然后执行完后,再次编译php
再次又出现新的报错,这安装个php还真是一波七八折


这个情况可能是:libiconv.so.2软链接问题
眼不眼熟。刚做完libiconv.so的软链接,现在又要做libiconv.so.2的软链接
命令如下:
ln -s /usr/local/libiconv/lib/libiconv.so.2 /usr/lib/libiconv.so.2
命令也是同样的味道
然后执行完后,再次编译php
还是一样的报错。惊了


这说明了上面那个软链接没有丝毫效果,那可怎么办呀
陷入了沉思
尝试重新添加动态链接库
vi /etc/ld.so.conf 在"include ld.so.conf.d/*.conf"下方增加"/usr/local/lib" /sbin/ldconfig -v
尝试重新编译
提示


眼泪快掉下来了,为什么别人都这么顺利,我一波七八九折了都
查看新的报错,有个关键词“chmod”这说明了可能是权限方面的问题
不能访问ext/phar/phar.phar:找不到该文件或目录
这个文件真的不存在吗,我尝试find一下


陷入了究极的沉思,为什么会这样呢,为什么他不在ext里呢
我决定试试资料里写的


第一个文件是符合资料里的内容,尝试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


修改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
启动以后就可以看到对应进程了
配置NGINX的php支持
先对nginx的默认站点进行增加php支持
vim /usr/src/nginx/conf/nginx.conf
在location块增加默认首页index.php


配置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; }


然后重启nginx
/usr/src/nginx/sbin/nginx -s reload
接前文(一)和(二)的配置
所以我要修改配置文件是vhost的配置文件
vim /usr/src/nginx/vhost/testhtml.conf
在location块增加 index.php


在文件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; }


然后重启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(); ?>
访问测试


???为什么会变成下载????
检查了一下php-fpm是正常运行并且端口也是正常监听


一脸楞逼的我思索了一下,下载=支持该格式但是没办法显示它
所以,可能是配置文件有问题
检查一下配置文件先
发现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; }


重启一下nginx
/usr/src/nginx/sbin/nginx -s reload
再次测试


就可以顺利打开了
参考资料:
①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
④其余见文中对应位置