背景
最近用flask做了个接口,功能主要是使用getssl用来申请letsencrypt免费证书,并将其功能嵌入进公司的CMDB系统,可以通过一键点击来进行证书的申请,添加TXT域名解析,获得证书文件,将证书文件自动推入到git库等待使用,等功能。
由于申请证书过程繁琐,时间较长,每次发起请求后,第60s必定返回一个502的错误结果,由于我的请求流程是
ajax --> 本地python request请求 --> nginx(反向代理)--> uwsgi部署的flask api
复制
于是我在所有流程中都增加了timeout,我这里设置了300s,你们可以根据情况自己设置合适的超时时间。
1、Ajax
$.ajax( { type: 'post', url: "{% url 'get_ssl' %}", data: {"domain": domain}, timeout: 300000, //这里设置超时时间,单位是毫秒 success: function(result) { if (result['code'] === 500){ ssl_p.text("") alert(result['message']); } else { ssl_p.text(result['message']); ssl_p.css('color', 'green'); access_img.show() } } } )
复制
2、python request
msg = requests.post(url=url, headers=headers, data=data, timeout=300)
复制
3、nginx
proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300;
复制
4、uwsgi
[uwsgi] master = true http = :6666 chdir = /root/ wsgi-file = /root/get_ssl.py callable = app processes = 4 vacuum = true pidfile = /var/run/uwsgi.pid daemonize = /var/log/uwsgi.log http-timeout=300 socket-timeout=300
复制
uwsgi可以根据你自己的配置情况来选择配置http-timeout还是socket-timeout,这里都配上也不影响。
由此解决了超时请求的问题。