Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 502表单验证失败时出现网关错误_Php_Laravel_Validation_Nginx - Fatal编程技术网

Php 502表单验证失败时出现网关错误

Php 502表单验证失败时出现网关错误,php,laravel,validation,nginx,Php,Laravel,Validation,Nginx,目前有一个表单,其中包含大量需要验证的字段,但遇到了一个我不太理解的问题。使用PHP5.6、Nginx1.11.9和Laravel5.1.45 表单中需要验证的字段数量不确定,因为用户可以在一个部分中动态添加更多字段,如果添加这些字段,则每个字段都需要包含信息。所以这个修复需要考虑到这一点 验证失败后,我的一个表单遇到502坏网关错误。我仔细查看了nginx日志,发现以下错误: upstream sent too big header while reading response header

目前有一个表单,其中包含大量需要验证的字段,但遇到了一个我不太理解的问题。使用PHP5.6、Nginx1.11.9和Laravel5.1.45

表单中需要验证的字段数量不确定,因为用户可以在一个部分中动态添加更多字段,如果添加这些字段,则每个字段都需要包含信息。所以这个修复需要考虑到这一点

验证失败后,我的一个表单遇到502坏网关错误。我仔细查看了nginx日志,发现以下错误:

upstream sent too big header while reading response header from upstream
因此,经过一点搜索,我找到了,接受的答案是我应该将以下内容添加到我的nginx.conf文件中:

fastcgi_buffers 16 16k; 
fastcgi_buffer_size 32k;
当我这样做时,验证失败时不是502错误,而是将我重定向回表单,就像我刚刚打开表单一样(没有填充任何字段,也没有显示错误消息)

所以我进一步研究了缓冲区的工作原理,我有一种预感,闪现的错误消息正在存储在这些缓冲区中,所以我删除了所有验证,除了一个字段,只是为了看看是否相关,它工作了!验证失败,页面会告诉用户一个字段有什么问题

因此,我一个接一个地重新向字段添加验证,直到它再次中断。它在15个字段失败后终止,这比fastcgi_buffers参数指定的值少一个字段

我删除了我之前添加的fastcgi行(这使得fastcgi_buffers参数默认为8),然后一个接一个地执行,直到它在7个字段处中断,再次比fastcgi_buffers参数少一个。所以我认为这可能与此有关

我尝试进一步增加这些值,但这总是会导致我的站点崩溃,可能是因为nginx配置无效

另一个重要的一点是,这种情况只发生在实时服务器上,而不是在运行pc的本地设置上。因此我认为这是因为服务器根本没有内存来处理它,但一个人的请求可能太多,服务器无法处理,这似乎是错误的。nginx的配置似乎与我的本地设置没有任何不同


我还缺什么吗?我是否可以进一步增加fastcgi_缓冲线以解决此问题?我应该换一种方式吗?感谢您的帮助

您可以尝试增加。

这很可能与在PHP中设置cookie会话驱动程序以及浏览器中cookie的限制有关。解决方案是使用cookie以外的另一个会话驱动程序(文件、redis等)


请参见

您的phpfpm日志显示了什么?当我在验证中遇到这些问题时,phpfpm日志似乎没有记录任何内容,而且它似乎没有显示任何错误。@Arty我遇到了完全相同的问题。你最终解决了吗?如何更改?我尝试在php.ini文件中更改post_max_大小,但不幸的是,无论是否使用nginx.conf文件中的fastcgi_缓冲行,结果都没有更改。为了澄清这一点,我将post_max_大小从8M更改为32M,然后又更改为0(无限制)。您是否比较了live和local php.ini?你的Laravel应用程序没有错误吗?(laravel.log是否为空?)