nginx 關(guān)于 proxy_pass 重試的問題
問題描述
各位大神,我的nginx會通過proxy_pass去調(diào)tomcat,但是tomcat會間歇性抽風(fēng)(fullgc)導(dǎo)致超時,7-8秒吧
我想了一個辦法就是請求第一次的時候設(shè)置一個超時時間,比如說1s,如果超時了,就在請求一次(換一臺機(jī)器)
然后我就有了下面這個nginx配置.(下面是用flask的sleep模擬tomcat的fullgc)
upstream up {server 127.0.0.1:8088;server 127.0.0.1:8089; } server {listen 8087;server_name localhost;access_log logs/host.access.log main;location / { proxy_connect_timeout 1s; proxy_send_timeout 1s; proxy_read_timeout 1s; proxy_next_upstream_timeout 1s; proxy_next_upstream_tries 1; send_timeout 1s;# proxy_next_upstream timeout error; proxy_pass http://up;} }
8088和8089的服務(wù)是我用寫的一個mock服務(wù)8088會直接睡秒2s,導(dǎo)致nginx超時8089會直接返回一個'hello world',200
我的期望是當(dāng)我用命令行 curl反復(fù)請求8087的時候,會始終返回 'hello world',雖然有些請求比較快,有些請求比較慢(1s多,因為經(jīng)過了一次超時請求之后重新進(jìn)行的請求)
但是結(jié)果卻并不是這樣
當(dāng)請求超過1s后,8087他就直接返回 504錯誤了

通過查看nginx后臺日志:連續(xù)打印了3條超時記錄:

但是8088(sleep的那個服務(wù),)僅僅只收到了一個請求(有些小異常,用flask寫的)

然后我用wireshark抓包發(fā)現(xiàn)

求助各位大神?我的配置哪里有問題嗎??
這里可能提提供了些無關(guān)信息,如果沒用可以忽略哈~
如過有其他好的處理tomcat fullgc超時問題的,也非常感謝啊~
問題解答
回答1:You asked for one try, then nginx tries that once.
try 和 retry 是不同的。你 proxy_next_upstream_tries 2; 試試。另外你似乎也誤解了 proxy_next_upstream_timeout 的意思。把它也去掉。
相關(guān)文章:
1. macos - 如何徹底刪除mac自帶的apache和php2. javascript - sublime快鍵鍵問題3. docker 17.03 怎么配置 registry mirror ?4. DADB.class.php文件的代碼怎么寫5. javascript - immutable配合react提升性能?6. css - 寫頁面遇到個布局問題,求大佬們幫解答,在線等,急!~7. mysql事務(wù)回滾定位8. javascript - html5多個label中其中一個觸發(fā)change,如何判斷是哪一個出發(fā)了change9. 實(shí)現(xiàn)bing搜索工具urlAPI提交10. css - 移動端字體設(shè)置問題

網(wǎng)公網(wǎng)安備