invalid request block size: 4542 (max 4096)...skip引起的Nginx 502 Bad Geteway
今天有用戶報告了一個issue:
當他訪問我們的網站時出現了以下錯誤:
但是我訪問同樣的地址卻沒有這個問題,連續訪問多次,查看uWSGI日誌發現出現以下ERROR:
原來是請求頭的大小超出了uWSGI的buffer大小,默認時4K,我們沒有做過修改,既然不夠大,那就給大點唄,
修改uwsgi.ini :增加:
buffer-size = 32768
重啟uWSGI以後,用戶問題得到解決.
但是問題來了,為什麽我的訪問沒有出現這個問題呢?或者上為什麽用戶會遇到這個問題,接下來開始查找原因:
我們的服務域名是二級域名: xxx.abc.com (域名涉及保密,這裏做了修改),公司還有一個網站是頂級域名:abc.com
用戶是先在頂級域名登錄後做了操作,有訪問我們二級網站,就出現了以下情景:
在請求我們的二級域名網站時使用了兩組cookie,第一組是頂級域名的cookie信息,第二組才是我們需要的本網站cookie信息:
在頂級域名中,cookie信息長度很長,個數還比較多,導致兩組cookie信息總大小超過了uWSGI的默認設置
為了方便理解,這裏用baidu做解釋:我們先請求www.baidu.com,可以訪問到百度首頁:然後在url欄點擊如下紅色標記(我用的是chrome瀏覽器):
可以看到這樣的結果:
這裏的baidi.com和www.baidu.com都指頂級域名,然後我們訪問百度貼吧:https://tieba.baidu.com/index.html
同樣點擊??圖標選擇cookie後看到如下結果:
和我們遇到的情況是一樣的,這是因為二級域名會共享頂級域名的cookie,在請求中一並發送,可以通過F12調試看到,我們刷新貼吧首頁的請求附帶的cookie信息:
其中一部分是頂級域名baidu.com的cookie:
另一部分是tieba.baidu.com的cookie信息:
這裏涉及到的更多知識點可以參考以下文章:
https://blog.csdn.net/qq_32239417/article/details/62228624
invalid request block size: 4542 (max 4096)...skip引起的Nginx 502 Bad Geteway