3

处理包含多行的 Excel 文件时出现错误 502。

使用 Django / Nginx

问题不在于文件的重量小于 1Mb。

此页面适用于 200 行的文件,当文件有更多行时问题开始,然后页面处理此文件的时间过长。

这是错误:

2012/07/28 14:29:54 [error] 18515#0: *34 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "POST /import/ HTTP/1.1", upstream: "http://127.0.0.1:9000/import/", host: "localhost:8080", referrer: "http://localhost:8080/import/"

我为变量使用了非常大的值,但我一直收到同样的错误。

这是网站的配置:


upstream app_server {
    server 127.0.0.1:9000 fail_timeout=3600s;
    keepalive 3600s;
}

server {
    listen 8080;
    client_max_body_size 4G;
    server_name localhost;

    keepalive_timeout           3600s;
    client_header_timeout       3600s;
    client_body_timeout         3600s;
    send_timeout                3600s;

    location /static/ {
        root  /my path/;
        autoindex on;
        expires 7d;
    }

    location /media/ {
        root  /my path/;
        autoindex on;
        expires 7d;
    }

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_redirect off;  

        proxy_connect_timeout       3600s;
        proxy_send_timeout          3600s;
        proxy_read_timeout          3600s;      

        if (!-f $request_filename) {
            proxy_pass http://app_server;
            break;
        }       
    }
}

这是全局配置:


user  www-data;
worker_processes  1;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include     /etc/nginx/mime.types;
    access_log  /var/log/nginx/access.log;
    sendfile        on;
    keepalive_timeout  3600s;
    tcp_nodelay        on;

    client_header_timeout       3600s;
    client_body_timeout         3600s;
    send_timeout                3600s;
    proxy_connect_timeout       3600s;
    proxy_send_timeout          3600s;
    proxy_read_timeout          3600s; 

    client_max_body_size 200m;
    client_body_buffer_size 128k;

    gzip  on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

你能给我一些帮助吗?

此致

4

1 回答 1

2

最好的选择是重写例程以使用 django-celery,但如果你想要一个快速的解决方案,你可以尝试通过添加以下内容来升级 Nginx 中代理传递的超时:

proxy_connect_timeout 300s;
proxy_read_timeout 300s;

你应该在 /var/nginx/sites-available/[site-config] 上添加这个配置到一个特定的站点或者 /var/nginx/nginx.conf 如果你想增加 nginx 服务的所有站点的超时时间。

如果您使用的是 gunicorn,则还必须添加 --timeout=300。例子:

gunicorn_django -D -b 127.0.0.1:8901 --workers=2 --pid=/var/webapp/campus.pid --settings=settings.production --timeout 300 --pythonpath=/var/webapp/campus/

参考:

于 2012-11-10T11:48:50.420 回答