【发布时间】:2017-08-15 01:32:40
【问题描述】:
目前有一个包含大量字段的表单需要验证,但遇到了一个我不太理解的问题。使用 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 行来解决这个问题吗?我应该以不同的方式解决这个问题吗?任何帮助表示赞赏!
【问题讨论】:
-
你的 phpfpm 日志显示什么?
-
当我在验证中遇到这些问题时,phpfpm 日志似乎没有记录任何内容,否则它似乎也没有显示任何错误。
-
@Arty 我遇到了完全相同的问题。你最终设法解决了吗?怎么样?
标签: php laravel validation nginx