站點(diǎn)部署情況:
前端vue、后端接口API thinkphp6.1,
采用寶塔面板部署,前端后端均強(qiáng)制使用https協(xié)議;
前端站點(diǎn)配置反向代理訪問api;
癥狀:
前端頁面正常打開,訪問api提示服務(wù)器錯誤,瀏覽器Devtools查看網(wǎng)絡(luò)選項卡,發(fā)現(xiàn)所有反向代理的post請求都返回的502 Bad xxxx;
解決過程
- 打開api站點(diǎn)添加測試路由直接訪問,發(fā)現(xiàn)正常返回數(shù)據(jù) (說明api站點(diǎn)沒有問題)
- 查看前端網(wǎng)站日志,日志提示:[error] 27383#0: *63259 upstream prematurely closed connection while reading response header from upstream,
- 查看api站點(diǎn)WAF,關(guān)閉站點(diǎn)WAF 訪問恢復(fù)正常
- 去掉所有WAF設(shè)置和規(guī)則,打開WAF,又提示502
- 修改前端站點(diǎn)反向代理配置文件加入超時配置如下,重啟Nginx問題解決
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 300s;
proxy_buffering off;
- 恢復(fù)所有WAF設(shè)置和規(guī)則,開啟WAF,依舊正常,至此問題解決
原因
upstream prematurely closed connection
表示 后端服務(wù)(upstream,即 xxx.xxx.xxx.xxx:443)在 Nginx 還沒讀到完整的響應(yīng)頭時就斷開了連接。
Nginx 是作為反向代理,把請求轉(zhuǎn)發(fā)到 upstream,但后端還沒返回正確的 HTTP 響應(yīng)頭就關(guān)閉了連接,所以 Nginx 報錯。
所以考慮調(diào)整反向代理超時時間解決