1. 程式人生 > >為什麼本地開發時使用CURL請求本地URL會卡死

為什麼本地開發時使用CURL請求本地URL會卡死

^_^是在WIN下開發。配置是nignxphp mysql

預設時啟動phpcgi

D:\php \php-cgi.exe-b 127.0.0.1:9000 -c D:\phpfind\phpa\php.ini

先看NGINX配置

1 2 3 4 5 6 7 8 9 location ~ \.php(.*)$  { fastcgi_pass   127.0.0.1:9000; fastcgi_index  index.php; fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param  PATH_INFO  $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include        fastcgi_params; }

NGINX中,看PHP檔案塊fastcig-pass的設定值(127.0.0.1:9000)。設定都是以keepalive方式請求,接收到PHP檔案時,交於後端過程PHPCGI解析處理(127.0.0.1:9000),等待響應。而在本地檔案以CURL請求本地環境中PHP檔案時,之前的PHP還在等待CURL後的結果,這時

9000埠已經被佔用。導致CURL一直在處於等待狀態。不設定timeout超時,程式就會卡死。結果都是false

解決方案:

新開啟一個phpcgi程序設定不同埠:

D:\php\php-cgi.exe -b 127.0.0.1:9001 -c D:\phpfind\phpa\php.ini

在需要被CURL的埠或域名設定中設定。

1 2 3 4 5 6 7 8 9 location ~ \.php(.*)$  { fastcgi_pass   127.0.0.1:9001; fastcgi_index  index.php; fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param  PATH_INFO  $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include        fastcgi_params; }

這樣就可以請求了。但是不能請求同一個域下的檔案。

這樣可以在nginx中使用php-cgi負載均衡:

1 2 3 4 5 6 7 8 9 10 11 12 13 upstream backend{ server 127.0.0.1:9000; server 127.0.0.1:9001; } location ~ \.php(.*)$  { fastcgi_pass   backend; fastcgi_index  index.php; fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$; fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; fastcgi_param  PATH_INFO  $fastcgi_path_info; fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info; include        fastcgi_params; }