Php 在提交验证失败表单时,Laravel给出502错误

Php 在提交验证失败表单时,Laravel给出502错误,php,laravel,Php,Laravel,我有一个更新表单,它用给定的输入更新我的数据库。我使用创建更新验证程序来检查给定的电子邮件是否唯一(如果不是唯一的,则会抛出验证错误并重新加载更新页面) 这是我的验证器: public function rules() { $contact_guid = $this->route('contact_guid'); return [ 'contact_email' => [ Rule::u

我有一个更新表单,它用给定的输入更新我的数据库。我使用创建更新验证程序来检查给定的电子邮件是否唯一(如果不是唯一的,则会抛出验证错误并重新加载更新页面)

这是我的验证器:

public function rules()
    {
        $contact_guid = $this->route('contact_guid');
        return  [
            'contact_email' => [
                Rule::unique('contact')->ignore($contact_guid, 'contact_guid'),
            ],
        ];
    }

    public function messages()
    {
        return [
            'contact_email.required' => 'E-mail is required.',
            'contact_email.unique'  => 'This e-mail is already in use.',
        ];
    }
问题似乎是某些联系人在某些唯一电子邮件中出现了
502错误
,而其他联系人在不同的唯一电子邮件中出现了502错误。我注意到,一旦我删除
“contact\u email.unique”=>“此电子邮件已在使用中”。
我的应用程序工作正常,不会出现
502错误

编辑:


我发现这封邮件在
“contact\u email.unique”=>“这封邮件已经在使用中了。”,
,它让我更频繁地使用502坏网关

HTTP 502:Bad Gateway响应不是默认情况下由Laravel输出的响应,而是由服务器输出的响应:

超文本传输协议(HTTP)502错误网关服务器错误响应代码表示服务器在充当网关或代理时从上游服务器接收到无效响应

但是,无效响应完全可能来自您的应用程序,因此尝试调试它是有意义的

此类问题可能有更多的原因,下面简要概述这些原因和可能的修复方法:

  • 确保已在Laravel
    .env
    文件中启用调试,并已清除缓存
  • 文件权限设置不正确。文件应为644,文件夹/目录应为755(取决于服务器,但一般经验法则)
  • 其中一个PHP文件中出现错误-请尝试在PHP配置中启用
    display\u errors
    选项
  • PHP内存和进程限制-尝试在PHP配置中增加
    内存限制
  • 其他PHP进程限制-请咨询服务器管理员/托管提供商
  • 损坏的PHP模块、扩展、构建-请与服务器管理员/托管提供商联系
  • 如果第1-6点没有生成修复程序,那么最好的做法是检查Apache错误日志

TL;DR:您需要让网络/系统管理员确定HTTP 502的原因。Apache错误日志可能会给您一个很好的提示。

在我的例子中,这是由于nginx没有配置为处理大标题,我在日志中看到:

upstream sent too big header while reading response header from upstream
解决方案是在nginx配置中添加以下行:

fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;

我也有同样的问题。增加缓冲区大小可以修复它。此外,我在应用程序中使用cookie作为会话驱动程序,我猜~1kb会话cookie占用了所有缓冲区


将会话驱动程序更改为文件/数据库也解决了此问题

非常感谢,我将仔细研究此问题!