Nginx 全系列

之前的文章介绍了静态文件的托管,这次主要讨论如何让 Nginx 跑 PHP。

方案

  1. 反向代理到 Apache Httpd(没有那个必要)

  2. 使用 FastCGI,针对 PHP 的实现就是 PHP-FPM(本文采用这个)

依赖

  • PHP-FPM
    • macOS 自带
    • Linux 发行版可使用包管理安装,名字应该就叫做 php-fpm
    • Windows 去 PHP 官网找下载

配置

PHP-FPM 的设置

  1. 找到 php-fpm 的配置文件,一般去 /etc/php 下翻一翻就能找到。我这里是:
1
/etc/php/7.0/fpm/pool.d/www.conf
  1. 在配置文件里搜索 listen,获取监听的位置。一般会有如下两种,任选其一:
  • 端口监听:listen = 127.0.0.1:9000
  • Socket 监听:listen = /run/php/php7.0-fpm.sock
  1. 如果上一步使用的是 socket 监听,还需要设置好权限,与 Nginx 的权限保持一致。例如 Nginx 的运行用户是 nginx,就要设置:
1
2
listen.owner = nginx
listen.group = nginx
  1. 启动 PHP-FPM
1
2
sudo systemctl enable php7.0-fpm
sudo systemctl start php7.0-fpm

Nginx 的配置

  1. 在 Nginx 配置文件中加入如下规则:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 匹配以 .php 结尾的路径,不区分大小写
location ~* \.php$ {
    # PHP 项目的目录
    root           /path/to/php/contents;
    index          index.php;
    # PHP-FPM 监听的位置
    fastcgi_pass   unix:/run/php/php7.0-fpm.sock;
    # 如果使用端口监听就是
    fastcgi_pass   http://127.0.0.1:9000;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param  SCRIPT_NAME $fastcgi_script_name;
    include        fastcgi_params;
}
  1. 重载配置文件:
1
sudo nginx -s reload

至此 Nginx 的 PHP-FPM 配置就完成了。

测试

向上文中的 PHP 目录里添加 test.php,内容为输出 PHP 信息:

1
2
3
<?php
    phpinfo();
?>

访问 http://hostname/test.php 即可查看结果。