Django Admin 不断返回 504 超时(nginx +uWSGI)

问题描述 投票:0回答:2

这是我的 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

问题是,当我进入一个具有大量内联对象和字段的 Model 对象的 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;

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

django nginx django-admin uwsgi systemd
2个回答
1
投票

也许可以使用 raw_id 字段(对于内联模型)在必要时加载管理。

参考:Django 管理 raw_id_fields

这样做你可以绕过504错误


0
投票

你的模型中可能有一个ForeignKey字段,对应的表可能有很多记录! Django 将尝试加载所有这些来填充下拉菜单。在许多应用程序中,用户字段经常会导致此类问题。您可以通过设置使其只读:

readonly_fields = ["user"]

您还可以将所有字段添加到 readonly_fields 中,然后将它们一一删除以找出有问题的字段。

© www.soinside.com 2019 - 2024. All rights reserved.