GuzzleHTTP 在尝试 POST 到 SSL 安全 URL 时杀死 php-fpm

GuzzleHTTP kills php-fpm when trying to POST to SSL secured URL

我在 Laravel 环境中使用 Guzzle 6.0.2(也尝试使用 5.3.0)。

出于测试目的,我创建了带有索引方法的控制器来测试 Guzzle POST 对其他 Web 服务器的请求。

我的方法:

<?php
public function index()
{
    $uri = 'https://payment.my-url.com/gw/testing';
    // $uri = 'http://pay.my-url.com/gw/testing';

    $client = new \GuzzleHttp\Client();
    $resource = $client->post($uri, [
        'json' => ['foo' => 'bar'],
        'headers' => [
            'Accept' => '*/*; q=0.5, application/xml',
            'Content-Type' => 'application/json; charset=utf-8',
            'User-Agent' => 'Client/1.0',
        ],
    ]);
     $statusCode = $resource->getStatusCode();
}

当我尝试使用此方法访问 URL 时,我从我的服务器收到 502 Bad Gateway,但它仅在我尝试发送到 HTTPS $uri 时出现。如果我发送到 HTTP(非安全)uri,那么我的请求会转到外部 Web 服务器,在那里我可以转储 POST 数据数组。

我在 OSX 环境中安装了 nginx 1.8.0 和 PHP 5.6.9。

我也尝试为 guzzle 客户端添加额外的配置,但这没有任何区别:

'curl' => [
    CURLOPT_SSL_VERIFYHOST => false,
    CURLOPT_SSL_VERIFYPEER => false,
],
'verify' => false,

当我尝试使用 GuzzleHTTP 组件将 POST 发送到 HTTPS uri 时,为什么我的网络服务器给我 502 错误网关?

问题是因为在 Laravel

上使用 Bugsnag 错误处理程序

如果更改 Laravel handler.php 文件以使用默认的 laravel 处理程序,则会抛出错误,如果使用 Busnag 错误处理程序,则 nginx 会因 502 错误而死,并且不会出现错误报告给 Bugsnag 或 Web 日志。

文件示例:

<?php namespace Payrex\Exceptions;

use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
// use Bugsnag\BugsnagLaravel\BugsnagExceptionHandler as ExceptionHandler;

class Handler extends ExceptionHandler
{
    // ...
}