This article mainly introduces the solution of page 504 gateway time-out
1. 504 gateway time out reason?
Because of the browser access interface request, the default timeout event is 1 minute. When the 504 interface timeout is encountered, first we need to see whether the Ajax interface request is set Timeout. Next, check whether nginx has set the agent timeout.
2. Inspection procedure
1. Front end Ajax settings
$.ajax({
url: '',
type: 'post',
data: postData,
timeout: 1000*60*10,
success: function(data){
console.log(data)
},
complete:function(XHR,TextStatus){
if(TextStatus=='timeout'){
console.log("Timeout");
}
}
})
2. Nginx agent timeout setting
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffering off;
proxy_buffer_size 128k;
proxy_buffers 100 128k;
3、 Problem extension (native JS encapsulates Ajax requests)
At that time, the Ajax request of jQuery was used, and the datatype: JSON was uniformly defined by the interface. Due to the file flow returned by the interface, the successful callback was not triggered and did not want to modify the datatype. Therefore, the Ajax request was encapsulated with native JS.
getAjax(url,callback){
var timeoutFlag=null;
var xhr=new XMLHttpRequest();
var url=""//request path, get request can spell the parameters into the address
xhr.open(type,url,async);//type request type url address async whether asynchronous request
xhr.responseType='blob';//If the return data is a file stream, you can set it to blob type
xhr.timeout=1000*60*60;//timeout time This is set to one hour
xhr.setRequestHeader('token',token);//set header token
xhr.onreadystatechange=function(){
if(xhr.readyState==4){
window.clearTimeout(timeoutFlag);
if(xhr.status==200 || xhr.status==304){
callback(xhr.response);
}
}
}
xhr.send(data);
timeoutFlag=window.setTimeout(function(){
window.clearTimeout(timeoutFlag);
xhr.abort();
},xhr.timeout);
}
getAjax('URL',function(res){
})