【问题标题】:Django Admin keeps returning 504 timeout ( nginx +uWSGI )Django Admin 不断返回 504 超时( nginx +uWSGI )
【发布时间】:2018-05-17 12:23:07
【问题描述】:

这是我的 nginx 配置:

server {
    listen 80;
    listen [::]:80;

    root /var/www/html;

    index index.html index.htm index.nginx-debian.html;

    server_name www.nameOfSite.id nameOfSite.id;

    access_log  off;
    error_log  /var/www/log_nginx/error.log;   
    gzip on;
    gzip_disable "msie6";

    client_header_timeout 180s;
    client_body_timeout 180s;
    client_max_body_size 100m;

    proxy_connect_timeout   120s;
    proxy_send_timeout      180s;
    proxy_read_timeout      180s;
    send_timeout            600s;

    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    location /static {    
        alias /var/www/django/static;    
    }

    location /media {    
       alias /var/www/django/media;    
    }

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        include         uwsgi_params;
        uwsgi_read_timeout 500;
        uwsgi_send_timeout 500;
        uwsgi_pass      unix:/var/www/uwsgi_texas.sock;
    }

}

这是我在 /var/www/texas_uwsgi.ini 中的 uWSGI ini 文件:

[uwsgi]
socket = /var/www/uwsgi_texas.sock
chdir = /var/www/django/
wsgi-file = /var/www/django/django/wsgi.py
processes = 8
threads = 1
master = true
harakiri = 900
chmod-socket = 777
vacuum = true

这是我在 /etc/systemd/system/texas.service 中的服务文件:

[Unit]
Description=TEXAS
After=syslog.target

[Service]
ExecStart=/usr/local/bin/uwsgi --ini /var/www/texas_uwsgi.ini
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=main

[Install]
WantedBy=multi-user.target

问题是,当我为一个具有大量内联对象和字段的模型对象进入 Django 管理员时,它会不断返回 504 超时,因为处理时间超过 60 秒。我检查了我的 NGINX、uWSGI 配置,我找不到如何增加这个“60 秒超时”的解决方案。其余页面工作正常。

在我的 nginx 配置中,我已经尝试过:

proxy_connect_timeout   120s;
proxy_send_timeout      180s;
proxy_read_timeout      180s;
send_timeout            600s;
uwsgi_read_timeout 500;
uwsgi_send_timeout 500;

这是我尝试打开模型管理页面时的结果:

【问题讨论】:

  • 所有的管理页面都会导致这个问题吗?
  • 不,只有一个名为 Product 的模型管理员显示了这个问题,因为它里面有大约 10 个内联模型,而且它有很多属性。
  • 它只显示如果它有很多数据,这导致超过60秒的处理&返回浏览器。我一直收到该模型的 504 超时,其余的管理员没有问题,它可以在我的 localhost 机器上运行。

标签: django nginx django-admin uwsgi systemd


【解决方案1】:

可能使用 raw_id 字段(用于内联模型)在必要时加载管理员。

参考:Django Admin raw_id_fields

这样做可以绕过504错误

【讨论】:

  • 我不能,管理员将无法使用,它可以用于某些字段,但如果我在内联中使用它,我的管理员将很难使用
  • 我不认为它会变得不可用,唯一的变化是它将是一个文本框而不是选择,而且你会有一个搜索选项。
  • 很好地让它 raw_id_fields 工作,现在它不显示错误,但我希望有更好的解决方案。我认为这与服务器可以发送给用户的“max_body_size”有关。但我收到的错误是 504
猜你喜欢
  • 2018-09-20
  • 2011-10-04
  • 2015-12-25
  • 2015-02-09
  • 2019-09-29
  • 2013-12-15
  • 1970-01-01
  • 2014-08-09
  • 2011-04-02
相关资源
最近更新 更多