php中curl_exec访问https网址导致nginx报502错误

问题解决,来填坑了

先描述下问题:

我的办公mac一直在用 Yosemite,php是用brew安装

brew install homebrew/php/php56

一直以来 在使用 php 的curl来请求 https 链接的时候就会导致 fpm 挂起,进而 nginx 会报 502

[02-Mar-2016 15:45:02] WARNING: [pool www] child 55122 exited on signal 11 (SIGSEGV) after 1919.585764 seconds from start`

nginx

2016/03/02 15:45:02 [error] 54788#0: 2242 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1, server: service.order.mi.com, request: "GET //* HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "service.order.mi.com"`

苦于不想升级 EI Captain (好多小工具不能用),只能苦逼的调试问题。
后来通过调试发现是 在 curl_exec 方法执行时挂起的

怀疑是代码bug、扩展编译问题,都被一一排除,重新安装php 5.6也无效。
最后怀疑可能跟系统自带curl有关,想升级但是发现系统不允许升级自带curl,只能作罢。

一直 google 了好久 终于在 stockoverflow 看了一个靠谱答案
需要在编译php5.6 的时候 使用 brew 自带 的 curl 和 openssl

命令如下:

brew install --with-fpm --with-homebrew-curl --with-homebrew-openssl --with-imap --with-homebrew-libxslt php56

重启php 一切恢复正常。

附 stockoverflow 的问题链接。
http://stackoverflow.com/questions/34510131/nginx-502-bad-gateway-with-curl-https-on-mac-os-x

标签: https nginx 502, php curl_exec https, php curl https 502

添加新评论