環境:jenkins+maven+nginx+tomcat
在執行jenkins job釋出項目到遠端伺服器,伺服器使用nginx+tomcat。預設使用80端口,通過nginx轉發請求。在執行tomcat:redeploy時,出現下面的錯誤:
但項目又是部署成功了的,隻是jenkins的job執行失敗。剛開始一直以為是tomcat的連接配接逾時了,設定connectionTimeout為-1時(keepAliveTimeout預設使用connectionTimeout的值),即永不逾時,錯誤依舊。那是不是nginx連接配接的逾時了呢?是以設定了nginx的keepalive_timeout參數,但還是沒有效果。
後來經過多番查找資料(對nginx不熟),檢視到nginx的錯誤日志(error_log),發現下面錯誤:
這是nginx連接配接逾時,而由于使用的是80端口,走的是nginx代理轉發的請求,原來,在nginx轉發請求後,等待讀取響應的時間逾時的情況下,nginx直接傳回了一個504 Gateway Time-out錯誤,是以會出現部署成功,卻傳回錯誤的情況。
知道了原因後就好辦了,查了一下資料,設定nginx代理的讀取逾時時間參數:
再試,果然成功了。問題解決。
另外,如果不使用nginx代理轉發請求,也可避免這個問題,直接使用,隻要不使用nginx預設的80端口即可。