php curl nginx 499 错误

在windows中开发LNMP项目时,会遇到同一台机器上有多个套php代码,如果直接用php通过curl访问其他项目时会提示超时。

 

经过尝试,可以用如下方式解决!

 

先查看nginx日志时看到如:

192.168.1.189 - - [17/Oct/2016:14:34:17 +0800] "GET /proxy/data/10002?asjdflasjkld=a12&sign=4033d03c16083e054f118a46247554653473fde0 HTTP/1.1" 499 0 "-" "-"

 

搜了下是nginx取消了请求,原因是请求超时,即访问php时发生了"死锁"的问题(我自己的话)。要解决此问题请参考如下配置:

 

假设本地hosts文件类似:

127.0.0.1 a.com

127.0.0.1 b.com

从a.com 访问 b.com

 

nginx配置如下,注意红字部分:

server{

listen 80;

server_name a.com;

location / {

   rewrite ^(.*)$ /index.php?$1 break;

        index index.php;

        fastcgi_pass 127.0.0.1:9000;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        include fastcgi_params;

}

}

server{

listen 8001;

server_name b.com;

location / {

    rewrite ^(.*)$ /index.php?$1 break;

        index index.php;

        fastcgi_pass 127.0.0.1:9001;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        include fastcgi_params;

}

}

 

这样两个项目(端口80和8001)分别连接php-cgi的9000及9001端口。注意:nginx可以都设成80,但php必须分开。

 

原因,windows下phpcgi没有多线程!linux中cgi启动时可以配置线程数的,所以没问题。(内因不研究了,问百度)

 

解决思想:

1.a.com启动后连接了9000端口,b.com启动后连接9001端口,二者不会导致cgi资源被占用而产生的超时问题。

2.在php中调用curl时需要配置 CURLOPT_HTTPHEADER

$url = 'http://127.0.0.1:8001'; // b的域名
$ch = curl_init($url);
curl_setopt_array(
    $ch, array(
         CURLOPT_HTTPHEADER=>array(
                "Host: b.com"
         ),
         // 其他参数
    )
);
$ret = curl_exec($ch);
// 处理结果

 

如此这般即可解决本地hosts映射后,curl能顺利找到相关网站的问题!

 

启动和停止phpcgi的cmd.zip文件请参考附件。

RunHiddenConsole这个大家可以看看,这个在用非集成环境(如phpStudy)时用于隐藏nginx的命令窗口。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值