【问题标题】:Can Windows PHP-FPM serve multiple simultaneous requests?Windows PHP-FPM 可以同时处理多个请求吗?
【发布时间】:2013-03-27 00:11:38
【问题描述】:

我目前正在使用 nginxPHP FastCGI,但这种安排受到一次只能处理一个 HTTP 请求的限制。 (请参阅here。)我从 Windows 命令提示符启动 PHP;

c:\Program Files\PHP>php-cgi -b 127.0.0.1:9000

但是还有另一种运行 PHP 的方法,称为“快速 CGI 进程管理器”(PHP-FPM)。

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

【问题讨论】:

    标签: windows-7 nginx php


    【解决方案1】:

    我最终得到了这个解决方案:你只需启动几个 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;
        }
    
    }
    

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

    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 ..
    

    stop_sandbox.bat:

    pstools\pskill php-cgi
    
    pstools\pskill mysqld
    
    pstools\pskill nginx
    

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

    【讨论】:

    • 谢谢。在过去的 2 个小时里一直在苦苦挣扎。
    【解决方案2】:

    还有一个更好的方法。

    在您的 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;        
           }
      }
    

    然后在你的 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
    

    PHP_FCGI_CHILDREN 变量是魔法发生的地方。 PHP_FCGI_MAX_REQUESTS 也很重要。

    【讨论】:

    • 时机不错。只是想在某处创建一个帖子,询问是否真的没有简单的方法可以在 Windows 上动态创建 PHP-FPM 子进程:)。
    • 效果很好!!!只有一个 php-cgi 进程我快疯了。没想到这么容易。谢谢!!!
    猜你喜欢
    • 2023-03-27
    • 2010-12-02
    • 2017-11-25
    • 2018-04-04
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多