为什么本地开发时使用CURL请求本地URL会卡死

^_^是在WIN下开发。配置是nignxphp mysql

默认时启动phpcgi是

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

先看NGINX配置

       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的端口或域名设置中设置。

       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负载均衡:

        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;
        }

见效果:

时间: 2024-11-04 14:46:59

为什么本地开发时使用CURL请求本地URL会卡死的相关文章

vue 本地开发时使用localhost与ip访问

修改config文件夹下面的index.js配置,将localhost改为0.0.0.0就可以了.用ip,127.0.0.1,localhost均行 host: '0.0.0.0', // can be overwritten by process.env.HOST 问题: 使用本地ip时访问发现登陆不上,使用localhost反而可以,后查明是cookit存入时存入是domain限制了,用内网ip如192.168.88.34:8080存不了cookei // 创建 获取 删除cookie ex

本地开发时同时启动多个tomcat服务器

1.环境变量中不要设置CATALINA_HOME: 2.分别修改安装目录下的conf子目录中的server.xml文件: a.修改http访问端口(默认为 8080端口),将8080修改为tomcat不在使用的端口号.此处所设的端口号即是以后访问web时所用的端口号. b.修改Shutdown端口(默认为8005端口),将8005修改为没有在使用的端口号,例如8055. c.修改8009端口,将8009修改为没有在使用的端口号,例如8099(注意:两个文件中对应的端口号要不一样) 3.依次启动两

开发时如何将自己本地的地址映射到公网当中

有一款很好的软件:ngrok,下载后直接在dos中输入ngrok 8080(Tomcat的端口号) 当然,因为最近很多外国的网站都被墙了,而且可能访问的速度非常的慢,你可以在添加一个对应的配置文件,让公网中的地址在国内(国内放置了一个tunnel服务器) 进入这个网站可以有详细的说明: http://www.tunnel.mobi/

浅谈webform开发时前台请求后台数据的方法

说到前台请求后台数据,我们一般都是用到AJAX(异步JavaScript和XML) .AJAX 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,我们可以对网页的某部分进行更新.在这里,主要浅谈一下在.net的webform开发时,前台请求后台的两种方式. 1.使用AjaxPro2.dll  (1)AjaxPro2.dll文件可以去网上下载,下载后引用到项目中. (2)引用到项目之后,在web.config里面的<system.web

curl请求方法

    /**      * CURL请求      * @param $url      * @param array Con      * @param String POST,XML,GET      *      * @return Array | String | XML      */     protected function http_get_contents($url, $con = array(), $type = 'GET')     {         $ch = cu

【PHP原生】CURL请求

curl_setopt所有设置项: http://php.net/manual/zh/function.curl-setopt.php 封装好的CURL操作类: https://github.com/wenpeng/curl CURL发送get/post请求示例 <?php /** * 发送CURL请求 * @param $url 请求的URL * @param $method 请求方法 * @param $params 参数(关联数组形式) * @param array $header 一维数

用 Ubuntu 12.04 搭建一个 Ruby on Rails 本地开发环境

转载,原文链接 http://linux.cn/portal.php?mod=view&aid=170 用 Ubuntu 搭建一个 Ruby on Rails 本地开发环境 想要开发 Ruby on Rails 应用吗?虽然已经有一些(初级的)Ruby on Rails 教程了,但是似乎在如何搭建一个简洁而更新的本地开发环境方面还有些不甚确定的地方. 这个教程将引导你通过几个步骤来搭建一个基于 Ubuntu 的 Ruby on Rails 本地开发环境.而这个教程的即将发布的第二部分,将帮助你搭

Vue-cli创建项目从单页面到多页面4 - 本地开发服务器设置代理

前后端分离开发时,有时候会遇到跨域的情况:只在开发的时候存在跨域,项目上线后,由于配置的域名相同,跨域就会不存在. 这个时候,有两种方案可以比较快的解决: 1.利用h5的特性,使用cors,在ngnix服务器上设置header:Access-Control-Allow-Origin的值为 *(或者目标域名)允许跨域. 2.在我们的本地开发服务器上设置代理. 这里主要介绍使用vue-cli创建项目后,怎样配置本地服务器的代理,成功通过本地服务器代理请求数据的解决方案. 解决方案 进入config/

配置https local本地开发环境

今天,几乎所有你访问的网站都是受HTTPS保护的.如果你还没有这样做,是时候这样做了.使用HTTPS保护您的服务器也就意味着您无法从非HTTPS的服务器发送请求到此服务器.这对使用本地开发环境的开发人员来说是一个问题,因为这些本地开发环境都是运行在http://localhost下的 在启动过程中,我们决定使用HTTPS来保护我们的AWS Elastic Load Balancer endpoints,作为增强安全性的一部分.一开始的时候我遇到了一个问题,我的本地开发环境对服务器的请求被拒绝.通