nginx+PHP 运行soap 在window平台报504超时的问题

今天在windws 7上跑一个最简单的soap实例居然没有成功,总是报504超时的错误,把代码放到测试机linux环境下,却很正常;google上搜了很久,看到这篇文章跟自己遇到问题很相似,但是我这边提供另外一种解决方案,http://tiandiou.blog.163.com/blog/static/23556682201061011415909/
我的开发环境是nginx+php,准备作一个soap的实验,soapclient和soapserver都是在我的开发机上,用soapclient访问soapserver的时候,总是返回504错误,相同的代码放到apache+php_module的环境下没有问题。
nginx的错误日志显示,client和server的错误都是fastcgi超时,我一度怀疑是soapserver的问题,soapserver超时不响应,导致了soapclient的超时。
但是我用cli模式执行client,server能正常返回,说明不是soapserver的问题。
用nginx下的client访问apache上的server,正常
用apache下的client访问nginx上的server,正常
我恍然大悟,是不是进程数的问题,先怀疑nginx,后怀疑php-cgi,一查资料,如果用php-cgi -b9000直接器fastcgi的话,同时只能处理一个请求,soapclient和soapserver需要两个进程,soapclient把进程挂 起等soap server返回,但是soapserver等待soapclient释放phpcgi的进程,所以一直都是返回504了。
赶紧打个fpm的补丁,困惑n天的问题解决了。
这位作者说打了fpm的补丁就解决了,本人学浅找了半天没有相关的信息,直到后来运维的同事告诉我,这是因为windows平台下,nginx监听fastcgi是单进程实现,不会像linux平台下php-cgi自己可以fock子进程,但是可以通过增加监听nginx端口的方法来绕过,下面是具体做法:
1)修改php-cgi启动脚本bat文件:

echo Starting php-cgi
rem set PHP_PATH=phpphp5.4
set PHP_PATH=phpphp5.3
RunHiddenConsole.exe %PHP_PATH%php-cgi.exe -b 127.0.0.1:9000 -c %PHP_PATH%php.ini
RunHiddenConsole.exe %PHP_PATH%php-cgi.exe -b 127.0.0.1:9001 -c %PHP_PATH%php.ini

2)修改nginx配置文件:

 upstream backend {
        server 127.0.0.1:9000;
        server 127.0.0.1:9001;
    }
  location ~ .*.(php|php5)?$ {
            #fastcgi_pass  unix:/tmp/php-cgi.sock;
            #fastcgi_pass  127.0.0.1:9000;
            fastcgi_pass backend;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param PATH_INFO $fastcgi_script_name;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }

这样以来,当发起soap请求的时候,php-cgi会走不同的端口,从而绕过windows下php-cgi单进程的问题;

发表评论

邮箱地址不会被公开。 必填项已用*标注