Nginx
和PHP
的组合主要是通过Fastcgi
通信,通信方式主要有两种:一种是TCP
,一种是unix socket
。
Nginx
和PHP
部署在不同机器上选择第一种,部署在同一台机器上可以选择第二种。
PHP-FPM
是PHP
端的 Fastcgi
的一种实现。
安装
Nginx
的安装:https://tech1024.com/original/3024
PHP
的安装:https://tech1024.com/original/2984
假设站点目录为 /wwwroot/example.com/
,创建站点文件 /wwwroot/example.com/public/index.php
:
<?php
echo phpinfo();
TCP配置方式
检查 PHP-FPM
的站点配置文件 /usr/local/php/etc/php-fpm.d/www.conf
中 listen
的值是否为ip+端口的形式:
listen = 127.0.0.1:9000
如果修改了使用 service php-fpm restart
使其生效。
在 Nginx
配置文件 /usr/local/nginx/conf/nginx.conf
中的 http
节点内添加站点:
server {
listen 80;
server_name example.com;
root /wwwroot/example.com/public;
index index.html index.htm index.php;
location ~ \.php$ {
# TCP,ip+端口的通信方式
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
重载 Nginx
使配置生效:
service nginx reload
如果没有报错,绑定好 host
,访问 http://example.com/
就可以看到 phpinfo
的页面了。
unix socket 配置方式
nix socket
是 *nix
系统进程间通信(IPC)的一种被广泛采用方式,以文件(一般是.sock)作为socket的唯一标识(描述符),需要通信的两个进程引用同一个socket描述符文件就可以建立通道进行通信了。
先修改 PHP-FPM
的站点配置文件 /usr/local/php/etc/php-fpm.d/www.conf
中 以下三个值:
listen = /tmp/php-cgi.sock
listen.owner = www
listen.group = www
使用 service php-fpm restart
使其生效。
在 Nginx
配置文件 /usr/local/nginx/conf/nginx.conf
中的 http
节点内添加站点:
server {
listen 80;
server_name example.com;
root /wwwroot/example.com/public;
index index.html index.htm index.php;
location ~ \.php$ {
# TCP,ip+端口的通信方式
# fastcgi_pass 127.0.0.1:9000;
# unix socket 方式
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
}
重载 Nginx
使配置生效:
service nginx reload
如果没有报错,绑定好 host
,访问 http://example.com/
就可以看到 phpinfo
的页面了。
如果网络不通可以尝试防火墙添加端口或者关闭防火墙 service firewalld stop
。