我有一个使用Flask,Gunicorn和nginx的API,该API可以正常工作,直到请求需要30秒钟以上才能回答。在这种情况下,API只会超时并返回504错误代码。
此API必须至少能够让查询运行180秒,这是到目前为止配置的方式:
Dockerfile:
FROM python:3.7
...
CMD ["gunicorn", "--reload", "--log-file", "/logs/gunicorn.log", "--workers", "2", "--timeout", "180", "application:app", "-b", ":4600"]
EXPOSE 4600
nginx.conf:
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
client_max_body_size 10m;
server {
listen 80;
server_name myapp.com;
keepalive_timeout 180;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
root /app;
gzip on;
gzip_types text/css application/javascript text/javascript application/json application/vnd.api+json;
location /api {
expires 0;
proxy_pass http://api:4600/;
}
}
}
如您所见,gunicorn配置为在180s和nginx之后也超时(通过keepalive_timeout
设置)。我还看到了Nginx的其他一些超时设置,但是文档说它们默认为90s,这与当前激活的30s超时不一致,毫无疑问,它来自那里。
但是,default timeout for gunicorn is 30s可能表明Dockerfile中的timeout
设置未正确定义或被忽略。
问题:是否可以解决这些设置,以使API遵循180秒超时行为,而不是当前观察到的30秒超时行为?