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
{
// ...
}
我在 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
{
// ...
}