WordPress是使用PHP语言开发的博客平台,前面已经配置完Nginx网页服务器和MySQL数据库,本文安装php环境。 有两个方法将PHP连接到Web服务器上。Apache、Microsoft Internet Information Server、Netscape和iPlanet等Web服务器使用一个直接的模块接口(也叫做SAPI)连接PHP。如果PHP不能作为模块支持Web服务器,可以将其作为CGI或FastCGI处理器来使用,这意味着可以使用PHP的CGI可执行程序来处理所有服务器上的PHP文件请求。此处用到的LNMP平台的Nginx使用FastCGI处理器来处理PHP文件请求。
安装环境
操作系统:CentOS Linux release 7.6.1810 (Core)
Kernel版本:3.10.0-957.1.3.el7.x86_64
Nginx版本:nginx-1.14.2
MySQL版本:mysql-5.7.24
安装php所需的库
[admin@ityoudao ~]$ sudo yum install zlib-devel libxml2-devel libjpeg-turbo-devel libpng-devel gd-devel libcurl-devel systemd-devel
获取并解压php源代码
[admin@ityoudao ~]$ cd /u01/src
[admin@ityoudao src]$ wget http://cn2.php.net/distributions/php-7.3.0.tar.gz
[admin@ityoudao src]$ tar -zxf php-7.3.0.tar.gz
[admin@ityoudao src]$ cd php-7.3.0
配置php
在此步骤可以使用很多选项自定义php,例如启用某些扩展等。可以使用./configure --help命令来获得完整的可用选项清单。
[admin@ityoudao php-7.3.0]# ./configure \
--prefix=/u01/app/php-7.3.0 \
--with-mysql-sock=/var/lib/mysqld/mysql.sock \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-curl \
--with-gd \
--enable-mbstring \
--enable-opcache \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--with-fpm-systemd
遇到的问题和解决方法
error: Your system does not support systemd.
问题详情:
checking for sd_notify in -lsystemd-daemon... no
checking systemd/sd-daemon.h usability... no
checking systemd/sd-daemon.h presence... no
checking for systemd/sd-daemon.h... no
configure: error: Your system does not support systemd.
解决方法:
如果指定了“--with-fpm-systemd”参数,必须安装systemd-devel软件包。
[admin@ityoudao php-7.3.0]$ sudo yum install systemd-devel
构建php并安装
[admin@ityoudao php-7.3.0]$ make
[admin@ityoudao php-7.3.0]# make install
[admin@ityoudao php-7.3.0]$ cd /u01/app && ln -s php-7.3.0 php
创建配置文件
创建PHP配置文件,并将其复制到正确的位置。 1)PHP引擎配置文件php.ini:
[admin@ityoudao ~]$ cp /u01/src/php-7.3.0/php.ini-production /u01/app/php/lib/php.ini
[admin@ityoudao ~]$ vi /u01/app/php/lib/php.ini
...
cgi.fix_pathinfo=0
...
- 将cgi.fix_pathinfo设置为0。如果文件不存在,则阻止Nginx将请求发送到后端的PHP-FPM模块,以避免遭受恶意脚本注入的攻击。
2)PHP服务配置文件php-fpm.conf和php-fpm.d/www.conf:
[admin@ityoudao ~]$ cd /u01/app/php/etc
[admin@ityoudao etc]$ ll
total 16
-rw-rw-r-- 1 admin admin 1276 Dec 15 17:19 pear.conf
-rw-r--r-- 1 admin admin 5397 Dec 15 17:19 php-fpm.conf.default
drwxrwxr-x 2 admin admin 4096 Dec 15 17:19 php-fpm.d
[admin@ityoudao etc]$ cp php-fpm.conf.default php-fpm.conf
[admin@ityoudao etc]$ cp php-fpm.d/www.conf.default php-fpm.d/www.conf
[admin@ityoudao etc]$ cat php-fpm.conf|grep -v "^$"|grep -v "^;"
[global]
include=/u01/app/php-7.3.0/etc/php-fpm.d/*.conf
[admin@ityoudao etc]$ cat php-fpm.d/www.conf|grep -v "^$"|grep -v "^;"
[www]
user = nginx
group = nginx
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
- 确保php-fpm模块使用nginx用户和nginx用户组的身份运行。
配置php-fpm服务开机启动并启动php-fpm
[admin@ityoudao ~]$ sudo cp /u01/src/php-7.3.0/sapi/fpm/php-fpm.service /usr/lib/systemd/system
[admin@ityoudao ~]$ cat /usr/lib/systemd/system/php-fpm.service
# It's not recommended to modify this file in-place, because it
# will be overwritten during upgrades. If you want to customize,
# the best way is to use the "systemctl edit" command.
[Unit]
Description=The PHP FastCGI Process Manager
After=network.target
[Service]
Type=notify
PIDFile=/u01/app/php-7.3.0/var/run/php-fpm.pid
ExecStart=/u01/app/php-7.3.0/sbin/php-fpm --nodaemonize --fpm-config /u01/app/php-7.3.0/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[admin@ityoudao ~]$ sudo systemctl enable php-fpm.service
Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service.
[admin@ityoudao ~]$ sudo systemctl start php-fpm.service
[admin@ityoudao ~]$ sudo systemctl status php-fpm.service
● php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2018-12-15 18:55:43 CST; 5s ago
Main PID: 24155 (php-fpm)
Status: "Ready to handle connections"
CGroup: /system.slice/php-fpm.service
├─24155 php-fpm: master process (/u01/app/php-7.3.0/etc/php-fpm.conf)
├─24156 php-fpm: pool www
└─24157 php-fpm: pool www
Dec 15 18:55:43 ityoudao systemd[1]: Starting The PHP FastCGI Process Manager...
Dec 15 18:55:43 ityoudao systemd[1]: Started The PHP FastCGI Process Manager.
PHP安装成功之后可以使用:
php -v
查看php版本;php -m
查看安装的模块;php --ri <模块名>
查看模块的信息
配置Nginx使其支持PHP应用
[admin@ityoudao ~]$ vi /u01/app/nginx/conf/nginx.conf
# 修改默认的location块,使其支持.php文件,其中“/u01/data/wordpress”是后文WordPress安装目录:
location / {
root /u01/data/wordpress;
index index.php index.html index.htm;
}
# 配置来保证对于.php文件的请求将被传送到后端的php-fpm模块,取消默认的PHP配置块的注释,并修改为下面的内容:
location ~* \.php$ {
root /u01/data/wordpress;
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
...
- 注意:“location ~* .php$” 也必须指定$document_root变量,即 “root /u01/data/wordpress;”,否则打开php页面报 “No input file specified.” 错误。
最后重启Nginx服务:
[admin@ityoudao ~]$ sudo systemctl restart nginx.service