表单验证失败导致的502错误网关

22 浏览
0 Comments

表单验证失败导致的502错误网关

目前有一个表单,其中有大量需要验证的字段,但遇到了一个我不太理解的问题。使用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

所以经过一些搜索,我找到了stackoverflow上的这个主题。被接受的答案说我应该在我的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行吗?我应该采用其他方式解决这个问题吗?任何帮助都将不胜感激!

admin 更改状态以发布 2023年5月21日
0
0 Comments

这很可能与在PHP中设置Cookie会话驱动程序以及浏览器中Cookie的限制有关。解决方案是使用除Cookie之外的其他会话驱动程序(文件、Redis等)。

请参见Cookie会话驱动程序无法保存任何验证错误或闪存数据

0
0 Comments

您可以尝试增加post_max_size

0