我正在使用 nginx 作为反向代理,以便能够访问我的Django API并提供静态文件。 我的Django API使用的是 gunicorn 。
我有一个端点,允许用户下载csv文件。我按照此处的说明进行操作,流式处理大型CSV文件:https://docs.djangoproject.com/en/2.2/howto/outputting-csv/
这是nginx的配置:
upstream docker-api {
server api;
}
server {
listen 443 ssl;
server_name xxxx.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to//privkey.pem;
include /path/to/options-ssl-nginx.conf;
ssl_dhparam /path/to/ssl-dhparams.pem;
location /static {
autoindex on;
alias /static/;
}
location /uploads {
autoindex on;
alias /uploads/;
}
location / {
proxy_pass http://docker-api;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
这是我用来启动 gunicorn 服务器的命令:
gunicorn my_api.wsgi -b 0.0.0.0:80 --enable-stdio-inheritance -w 2 -t 180 -k gevent
当我尝试下载文件时,Gunicorn总是在3分钟后使我的请求超时。它不应使流式HTTP响应超时。
答案 0 :(得分:0)
问题出在您的Gunicorn命令上。
让我们看看:
您的gunicorn命令上的gunicorn my_api.wsgi -b 0.0.0.0:80 --enable-stdio-heritance -w 2 -t 180 -k gevent
-t
代表timeout
,以秒为单位,并且您的gunicorn工作者超时,因为您已将超时设置为180秒(3分钟)。
当我尝试下载文件时,Gunicorn总是在3分钟后使我的请求超时。
要解决此问题,您可以简单地增加超时时间,例如,以下gunicorn命令会将超时时间设置为5分钟:
gunicorn my_api.wsgi -b 0.0.0.0:80 --enable-stdio-heritance -w 2 -t 300 -k gevent
查看文档以获取更多信息:http://docs.gunicorn.org/en/stable/settings.html#timeout
答案 1 :(得分:0)
此错误通常由两件事引起:
Nginx超时:您应在其中将这两行代码添加到 Nginx文件:
ng serve --open
)$ nano / etc / nginx / sites-available / myproject
myproject
部分应如下所示:(请注意
超时部分):
location /
$ systemctl start nginx
$ nano /etc/systemd/system/gunicorn.service
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
proxy_connect_timeout 300s;
proxy_read_timeout 300s;
}
添加到文件中--timeout 300
下的位置。要获得更多帮助,请查看link下的整个文件:
[service]
$ systemctl守护程序重新加载
$ systemctl重新启动gunicorn.socket gunicorn.service