目前有一个包含大量字段的表单需要进行验证,但遇到了一个我不太了解的问题。使用php 5.6,nginx 1.11.9和Laravel 5.1.45。
表单具有无限数量的需要验证的字段,因为用户可以动态地向一个部分添加更多字段,其中每个字段都需要具有添加的信息。因此,此修复需要考虑到这一点。
验证失败后,我的某个表单会遇到502 Bad Gateway错误。我稍微查看了nginx日志,发现以下错误:
upstream sent too big header while reading response header from upstream
经过一些搜索后,我发现this thread on stack overflow并且接受的答案说我应该将以下内容添加到我的nginx.conf文件中:
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
当我这样做时,而不是在验证失败时出现502错误,它只是将我重新定向回到表单,就像我刚刚打开它一样(没有填充任何字段,也没有显示错误消息)。
所以我调查了缓冲如何工作,并且我有一种预感,闪存的错误消息存储在这些缓冲区中,因此我删除了除一个字段之外的所有验证,只是为了查看它是否相关,并且它作品!验证失败,页面告诉用户一个字段有什么问题。
所以我逐个向字段重新添加验证,直到我再次破坏它为止。它在15个字段失败后最终中断,这比fastcgi_buffers参数指定的少一个。
我删除了fastcgi行(这使得fastcgi_buffers参数默认为8)我之前添加了,然后再一个一个地去,直到它在7个字段中断,再次比fastcgi_buffers参数少一个。所以我认为这可能与此有关。
我尝试进一步增加这些值,但它总是会导致我的网站崩溃,可能是因为nginx配置无效。
另一个重要的一点是,这只发生在实时服务器上,而不是在我的电脑上运行的本地设置上。所以我认为这是因为服务器根本没有内存来处理它,但是一个人的请求对于服务器来说可能太多了,这似乎是错误的。 nginx配置似乎与网站到我的本地设置完全不同。
我还缺少其他什么吗?我可以进一步增加fastcgi_buffer线来解决这个问题吗?我应该以不同的方式解决这个问题吗?任何帮助表示赞赏!
答案 0 :(得分:0)
您可以尝试增加post_max_size。
答案 1 :(得分:0)
这很可能与在PHP中设置cookie会话驱动程序以及浏览器中cookie的限制有关。解决方案是使用另一个会话驱动程序而不是cookie(文件,redis等)
请参见Cookie session driver won't save any validation error or flash data