Nginx总是使用Homestead返回502

时间:2016-10-28 13:06:45

标签: php nginx laravel-5.2 homestead

我正在使用带有Homestead的Laravel 5.2,我在每次请求时都会收到此错误。

/var/log/nginx/dev.me-error.log

  

1415#1415:* 1 recv()失败(104:对等连接重置)从上游读取响应头,客户端:192.168.10.1,server:dev.me,request:" POST / api / v1 / auth / user / login HTTP / 1.1",上游:" fastcgi:// unix:/var/run/php/php7.0-fpm.sock:",主持人:& #34; dev.me",推荐人:" http://dev.me/"

这是nginx配置,但它会在每个配置上重置,所以我不认为我可以更改它。

server {
    listen 80;
    listen 443 ssl http2;
    server_name dev.me;
    root "/home/vagrant/Code/public";

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log off;
    error_log  /var/log/nginx/dev.me-error.log error;

    sendfile off;

    client_max_body_size 100m;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
    }

    location ~ /\.ht {
        deny all;
    }

    ssl_certificate     /etc/nginx/ssl/dev.me.crt;
    ssl_certificate_key /etc/nginx/ssl/dev.me.key;
}

更新

我终于找到了问题。事实证明,当验证错误发生时,Nginx会回复502.

此方法用于验证项目中的数据:

public static function make()
    {
        if ( ! static::$rules) {
            throw new \Exception('Nothing to validate but expected to.');
        }

        $data = (self::$data ? self::$data : Request::all());

        $validator = parent::make($data, static::$rules, static::$messages);

        if ($validator->fails()) {
            $messages = [];

            foreach ($validator->getMessageBag()->getMessages() as $field => $message) {

                $messages[$field] = array_pop($message);
            }

            throw new ValidationException($messages);
        }

        return true;
    }

问题是array_pop($message) foreach导致php错误(仅在Laravel上下文中):

/var/log/php7.0-fpm.log

  

[2016年10月31日11:04:31]警告:[pool www] child 22235在开始1534.070207秒后退出信号11(SIGSEGV)

     

[2016年10月31日11:04:31]通知:[pool www] child 22361开始

我找不到这个错误的含义。我发现类似的错误只适用于旧的PHP版本。

修复:

foreach ($validator->getMessageBag()->getMessages() as $field => $message) {

   $messages[$field] = $message[0];
}

我也尝试使用array_shift(),但它会导致与array_pop()相同的错误。

如果有人知道为什么会这样,请告诉我。

0 个答案:

没有答案