Windows+nginx+php-cgi的多进程问题

目录

问题

Windows 下 PHP_FCGI_CHILDREN 环境变量被忽略,php-cgi 无法自动 fork 子进程,导致只有一个 php-cgi 进程,多个 PHP 请求会串行处理。

解决方案

手工启动多个 php-cgi 实例,分别监听不同端口。

启动脚本(batch):

start "fcgi服务" /MIN /D "%batDir%php" php-cgi.exe -b 127.0.0.1:9000 -c "%batDir%php/php.ini"
start "fcgi服务" /MIN /D "%batDir%php" php-cgi.exe -b 127.0.0.1:9001 -c "%batDir%php/php.ini"
start "fcgi服务" /MIN /D "%batDir%php" php-cgi.exe -b 127.0.0.1:9002 -c "%batDir%php/php.ini"
start "fcgi服务" /MIN /D "%batDir%php" php-cgi.exe -b 127.0.0.1:9003 -c "%batDir%php/php.ini"
start "nginx服务" /MIN /D "%batDir%nginx" nginx.exe

配置 nginx 上游负载均衡:

http {
  upstream fastcgi_backend {
    server 127.0.0.1:9000;
    server 127.0.0.1:9001;
    server 127.0.0.1:9002;
    server 127.0.0.1:9003;
  }

  server {
    listen 80;
    server_name example.com;
    access_log log/access.log;
    root d:/web/www;

    location ~ \.php$ {
      fastcgi_pass fastcgi_backend;
    }
  }
}

启动多个 php-cgi 后可实现并行处理,但进程数受限(4 个进程需启动 4 个实例)。

#nginx #php