11

I'm running a Django site using the fastcgi interface to nginx. However, some pages are being served truncated (i.e. the page source just stops, sometimes in the middle of a tag). How do I fix this (let me know what extra information is needed, and I'll post it)

Details:

I'm using flup, and spawning the fastcgi server with the following command:

python ./manage.py runfcgi umask=000 maxchildren=5 maxspare=1 minspare=0 method=prefork socket=/path/to/runfiles/django.sock pidfile=/path/to/runfiles/django.pid

The nginx config is as follows:

# search and replace this: {project_location}
pid /path/to/runfiles/nginx.pid;
worker_processes  2;
error_log /path/to/runfiles/error_log;
events {
    worker_connections  1024;
    use epoll;
}
http {
    # default nginx location
    include        /etc/nginx/mime.types;
    default_type    application/octet-stream;
    log_format main
        '$remote_addr - $remote_user [$time_local] '
            '"$request" $status $bytes_sent '
        '"$http_referer" "$http_user_agent" '
        '"$gzip_ratio"';
    client_header_timeout  3m;
    client_body_timeout    3m;
    send_timeout           3m;
    connection_pool_size        256;
    client_header_buffer_size    1k;
    large_client_header_buffers    4 2k;
    request_pool_size        4k;
    output_buffers   4 32k;
    postpone_output  1460;
    sendfile        on;
    tcp_nopush             on;
    keepalive_timeout      75 20;
    tcp_nodelay            on;
    client_max_body_size       10m;
    client_body_buffer_size    256k;
    proxy_connect_timeout      90;
    proxy_send_timeout         90;
    proxy_read_timeout         90;
    client_body_temp_path      /path/to/runfiles/client_body_temp;
    proxy_temp_path            /path/to/runfiles/proxy_temp;
    fastcgi_temp_path            /path/to/runfiles/fastcgi_temp;
    gzip on;
    gzip_min_length  1100;
    gzip_buffers     4 32k;
    gzip_types       text/plain text/html application/x-javascript text/xml text/css;
    ignore_invalid_headers    on;
    server {
        listen 80;
        server_name alpha2.sonyalabs.com;
        index index.html;
        root   /path/to/django-root/static;
        # static resources
        location ~* ^/static/.*$
        {
        root   /path/to/django-root;
                expires 30d;
                break;
        }
        location / {
            # host and port to fastcgi server
            fastcgi_pass unix:/path/to/runfiles/django.sock;
            fastcgi_param PATH_INFO $fastcgi_script_name;
            fastcgi_param REQUEST_METHOD $request_method;
            fastcgi_param QUERY_STRING $query_string;
            fastcgi_param CONTENT_TYPE $content_type;
            fastcgi_param CONTENT_LENGTH $content_length;
            fastcgi_pass_header Authorization;
            fastcgi_intercept_errors off;
        }
        location /403.html {
                root   /usr/local/nginx;
                access_log   off;
        }
        location /401.html {
                root   /usr/local/nginx;
                access_log   off;
        }
        location /404.html {
                root   /usr/local/nginx;
                access_log   off;
        }
        location = /_.gif {
                    empty_gif;
                access_log   off;
        }
            access_log    /path/to/runfiles/localhost.access_log main;
            error_log    /path/to/runfiles/localhost.error_log;
        }
}
4

6 回答 6

8

我在 nginx 上运行 Nagios 时遇到了同样的问题。我在谷歌搜索答案时偶然发现了您的问题,并阅读了“权限被拒绝”相关的答案,这让我印象深刻(也许它会对您有所帮助):

  • Nginx error.log 报告:

    2011/03/07 11:36:02 [crit] 30977#0: *225952 open() "/var/lib/nginx/fastcgi/2/65/0000002652" 失败(13:权限被拒绝)

  • 所以我只是跑了# chown -R www-data:www-data /var/lib/nginx/fastcgi

  • 固定的 !(感谢您的间接帮助)

于 2011-03-07T10:54:59.563 回答
6

检查错误日志以了解写入.../nginx/tmp/...文件的“权限被拒绝”错误。Nginx 可以正常工作,除非它需要临时空间,这通常发生在 32K 边界。如果您发现这些错误,请确保 tmp 目录可由 nginx 运行的用户写入。

于 2010-12-23T04:37:11.697 回答
3

您正在使用什么 fastcgi 界面以及如何使用。是扑腾吗?如果是,请粘贴您生成服务器的方式以及它如何连接到 nginx。如果没有这些信息,它只是在猜测可能会出现什么问题。

可能出现的问题:

  • nginx 有问题。至少 lighttpd 有可怕的 fastcgi 错误,我不怀疑 nginx 是否也有一些:)
  • Django 在内部系统中因未正确捕获的回溯而死亡,并关闭了您无法从客户端看到的 fastcgi 服务器。在这种情况下,包装 fastcgi 服务器应用程序调用并尝试/排除它以打印异常。

但是服务器日志和配置会很棒。

于 2008-10-01T21:21:52.243 回答
2

尝试提高“gzip_buffers”可能会有所帮助。

见这里: http ://blog.leetsoft.com/2007/7/25/nginx-gzip-ssl

于 2009-03-23T20:00:22.547 回答
2

FastCGI 不应为此负责。

我使用 nginx/gunicorn 遇到了完全相同的问题。将响应大小减少到小于 32k(在特定情况下使用spaceless模板中的标签)解决了这个问题。

正如 dwc 所说,由于 nginx 使用地址空间的方式,这可能是一个硬限制。

于 2011-05-17T15:17:05.467 回答
0

我在我的网络主机(Webfaction)和本地 Ubuntu 开发服务器上运行与此非常相似的配置,我没有看到任何问题。我猜这是导致此问题的超时或缓冲区已满。

您可以发布nginx错误日志的输出吗?另外你使用的是什么版本的nginx?

作为旁注,可能值得查看django-logging以了解您的 fastcgi 进程在做什么。

于 2009-07-23T16:11:04.953 回答