Nginx 系列(三)——部署 PHP

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
  2. 在配置文件里搜索 listen,获取监听的位置。一般会有如下两种,任选其一:

    • 端口监听:listen = 127.0.0.1:9000
    • Socket 监听:listen = /run/php/php7.0-fpm.sock
  3. 如果上一步使用的是 socket 监听,还需要设置好权限,与 Nginx 的权限保持一致。例如 Nginx 的运行用户是 nginx,就要设置:

    1
    2
    listen.owner = nginx
    listen.group = nginx
  4. 启动 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;
    }
  2. 重载配置文件:

    1
    sudo nginx -s reload

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

测试

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

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

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