使用 nginx + gunicorn + django 的间歇性错误请求 (400) Spotify API 回调

Intermittent Bad Request (400) Spotify API callback using nginx + gunicorn + django

当我使用 nginx 为我的 spotify django 应用程序提供 gunicorn 套接字处理通信时,我有时会在用户身份验证回调期间收到 Bad Request 错误。如果 gunicorn 配置为带有 ip 和端口的 TCP,我不会遇到错误,如果我使用 django 的 manage.py runserver;用户认证成功。这个间歇性问题似乎只在我使用套接字连接时出现。检查了 nginx、gunicorn 和 django 日志,除了 400 代码之外没有真正得到任何信息。

使用 tekore python 库访问 spotify 的 api。

这是我的 nginx 配置:

upstream app_server {
server unix:/home/yg/Documents/projects/app/run/gunicorn.sock fail_timeout=0;
}

server {
listen 80;
server_name 192.168.0.26;
client_max_body_size 4G;
access_log /home/yg/Documents/projects/app/logs/nginx-access.log;
error_log /home/yg/Documents/projects/app/logs/nginx-error.log;

location /static/ {
alias   /home/yg/Documents/projects/app/static/;
}

location /media/ {
alias   /home/yg/Documents/projects/app/media/;
}

location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
proxy_buffering off;
if (!-f $request_filename) {
proxy_pass http://app_server;
break;
}
}
# Error pages
error_page 500 502 503 504 /500.html;
location = /500.html {
root /home/yg/Documents/projects/app/static/;
}
}

该问题与 nginx 无关,事实证明 gunicorn 不支持使用 web 套接字的多个工作者。将我的工人数量从 3 人更改为 1 人。