4 回答

TA貢獻1876條經驗 獲得超5個贊
似乎請求超時對您來說不是問題。這是連接超時。我認為我們需要看看標題
連接
AFAIK,標頭定義,連接應該是持久的,或者誰有權維護/關閉它。如果連接為 ,則連接將持久。對于保持活動狀態的連接,客戶端偶爾會發送 TCP ping,以確保服務器仍處于活動狀態并保持連接。根據卷曲,默認情況下,此時間是每 60 秒一次。Connection
keep-alive
現在,必須將 配置為接受連接,并使用 keepalive_timeout
指令使其保持活動狀態一段時間。如果不存在,則不會使連接保持活動狀態。nginx
nginx
這應該就是nginx在日志中說499的原因。HTTP499是nginx中的一個控制錯誤,它說客戶端關閉了連接。在你的情況下關閉了它。為什么要關閉它?因為 nginx 沒有響應 60 秒的 TCP ping,因為未啟用保持活動狀態。curl
curl
將keepalive_timeout
添加到 ~500 或高于應用程序超時的值應該可以解決您的問題。
現在,為什么它直接與雄貓合作?我認為春天使活動超時是無限的或非常高的值。通常在雄貓中也有它的60秒。
我希望這能解決你的問題。

TA貢獻1847條經驗 獲得超11個贊
我想這是由于許多其他事情而可能發生的問題之一。這是一個對我有用的解決方案(我也在以下位置遇到錯誤:/var/log/nginx/error.log
2020/12/30 21:47:47 [錯誤] 26765#26765: *13064 上游超時 (110: 連接超時) 連接到上游時, 客戶端: XXX, 服務器: example.com, 請求: “GET /eshop HTTP/1.0”, 上游: “http://[::1]:8080/error_50x.html”, 主機: “example.com”
奇怪的是,這并沒有發生在我的筆記本電腦上,而只發生在我的服務器上。所以我檢查了IP,結果發現這可能是因為缺少::1地址。當我將其添加到 lo 網絡設備時,我無法復制超時。
sudo ip a add ::1/128 dev lo
下一篇:(這是我的理解,我不是100%確定:)此外,由于保持與localhost Java服務連接的開銷似乎高于僅刪除該連接并在發出另一個請求時再次連接,因此建議對代理使用以下設置(在nginx的站點.conf中):
proxy_http_version 1.1; proxy_set_header Connection "";
請參閱 https://stackoverflow.com/a/10396874/3223505

TA貢獻1793條經驗 獲得超6個贊
由于您的配置缺少proxy_http_version鍵,因此可能仍無法為上游啟用 Keepalive。
引用自:https://www.nginx.com/blog/tuning-nginx/#proxy_http_version
要啟用與上游服務器的保持活動連接,還必須在配置中包含以下指令:
proxy_http_version 1.1; proxy_set_header Connection "";
我也會按照Kris的建議將keepalive_timeout保留在配置中。

TA貢獻2037條經驗 獲得超6個贊
嘗試將超時設置放在 /etc/nginx/conf.d/timeout.conf 中(如果沒有,請創建一個)。設置以下設置,
proxy_connect_timeout 600; proxy_send_timeout 600; proxy_read_timeout 600; send_timeout 600;
添加回答
舉報