Windows PHP-FPM可以同时提供多个请求吗?

Nig*_*ton 3 php nginx windows-7

我目前正在使用nginxPHP FastCGI,但这种安排受限于它一次只能提供一个HTTP请求.(见这里.)我通过Windows命令提示符启动PHP;

c:\Program Files\PHP>php-cgi -b 127.0.0.1:9000
Run Code Online (Sandbox Code Playgroud)

然而,还有另一种运行PHP的方法,称为"快速CGI进程管理器"(PHP-FPM).

在nginx后面的Windows 7上运行时,PHP-FPM可以同时处理多个HTTP请求吗?

小智 8

我最终得到了这个解决方案:你只需启动几个php-cgi进程并将它们绑定到不同的端口,你需要更新nginx配置:

http {

    upstream php_farm {
        server 127.0.0.1:9000 weight=1;
        server 127.0.0.1:9001 weight=1;
        server 127.0.0.1:9002 weight=1;
        server 127.0.0.1:9003 weight=1;
    }

    ...

    server {
      ...
      fastcgi_pass   php_farm;
    }

}
Run Code Online (Sandbox Code Playgroud)

为方便起见,我创建了简单的批处理文件.

start_sandbox.bat:

@ECHO OFF
ECHO Starting sandbox...

RunHiddenConsole.exe php\php-cgi.exe -b 127.0.0.1:9000 -c php\php.ini
RunHiddenConsole.exe php\php-cgi.exe -b 127.0.0.1:9001 -c php\php.ini
RunHiddenConsole.exe php\php-cgi.exe -b 127.0.0.1:9002 -c php\php.ini
RunHiddenConsole.exe php\php-cgi.exe -b 127.0.0.1:9003 -c php\php.ini

RunHiddenConsole.exe mysql\bin\mysqld --defaults-file=mysql\bin\my.ini --standalone --console

cd nginx && START /B nginx.exe && cd ..
Run Code Online (Sandbox Code Playgroud)

并且stop_sandbox.bat:

pstools\pskill php-cgi

pstools\pskill mysqld

pstools\pskill nginx
Run Code Online (Sandbox Code Playgroud)

如您所见,有2个依赖项:pstoolsrunhiddenconsole.exe


小智 6

还有一种替代方案,即更好的方式。

在 nginx 配置中使用简单的 Fast-CGI 设置

nginx.conf

server {
     ....
     location ~ \.php$ {
            try_files   $uri =404; 
            include     fastcgi.conf;
            fastcgi_pass    127.0.0.1:9001;
            fastcgi_read_timeout 60;
            allow       127.0.0.1;
            allow       ::1;        
            deny        all;        
       }
  }
Run Code Online (Sandbox Code Playgroud)

然后在你的start.bat文件中

set PATH=%cd%\bin\php;%PATH%
set PHP_FCGI_MAX_REQUESTS=0
set PHP_FCGI_CHILDREN=10
RunHiddenConsole.exe %cd%/php/php-cgi.exe -b 127.0.0.1:9001 -c %cd%/php/php.ini
Run Code Online (Sandbox Code Playgroud)

PHP_FCGI_CHILDREN 变量是神奇发生的地方。PHP_FCGI_MAX_REQUESTS 也很重要。