簡體   English   中英

表單驗證失敗時出現 502 Bad Gateway 錯誤

[英]502 Bad Gateway Error on failed form validation

目前有一個包含大量需要驗證的字段的表單,但遇到了一個我不太明白的問題。 使用 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

因此,經過一番搜索,我在堆棧溢出時發現了這個線程,並且接受的答案說我應該將以下內容添加到我的 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 行而不是解決這個問題嗎? 我應該以不同的方式解決這個問題嗎? 任何幫助表示贊賞!

您可以嘗試增加post_max_size

這很可能與在 PHP 中設置 cookie 會話驅動程序以及瀏覽器中 cookie 的限制有關。 解決方案是使用 cookie 以外的其他會話驅動程序(文件、redis 等)

請參閱Cookie 會話驅動程序不會保存任何驗證錯誤或閃存數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM