简体   繁体   English

Nginx + fastcgi截断问题

[英]Nginx + fastcgi truncation problem

I'm running a Django site using the fastcgi interface to nginx. 我使用fastcgi接口运行一个Django站点到nginx。 However, some pages are being served truncated (ie 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: 我正在使用flup,并使用以下命令生成fastcgi服务器:

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: nginx配置如下:

# 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;
        }
}

I had the same exact problem running Nagios on nginx. 我在nginx上运行Nagios时遇到了同样的问题。 I stumbled upon your question while googling for an answer, and reading "permission denied" related answers it struck me (and perhaps it will help you) : 我在谷歌上搜索答案时偶然发现了你的问题,并且阅读了“许可被拒绝”的相关答案,这让我感到震惊(也许它会帮助你):

  • Nginx error.log was reporting : Nginx error.log正在报告:

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

  • so I just ran # chown -R www-data:www-data /var/lib/nginx/fastcgi 所以我只跑#chown -R www-data:www-data / var / lib / nginx / fastcgi

  • Fixed ! 固定! (and thank you for your indirect help) (谢谢你的间接帮助)

Check your error logs for "Permission denied" errors writing to .../nginx/tmp/... files. 检查错误日志中写入“Permission denied”错误,写入.../nginx/tmp/...文件。 Nginx will work fine unless it needs temporary space, and that typically happens at 32K boundaries. 除非需要临时空间,否则Nginx将正常工作,并且通常发生在32K边界。 If you find these errors, make sure the tmp directory is writable by the user nginx runs as. 如果发现这些错误,请确保用户nginx运行的tmp目录是可写的。

What fastcgi interface are you using and how. 你使用什么fastcgi接口以及如何使用。 Is it flup? 是痘吗? If yes, paste the way you spawn the server and how it's hooked into nginx. 如果是,请粘贴您生成服务器的方式以及它如何连接到nginx。 Without that information it's just guessing what could go wrong. 没有这些信息,它只是猜测可能出现的问题。

Possible problems: 可能的问题:

  • nginx is buggy. nginx是越野车。 At least lighttpd has horrible fastcgi bugs, I wouldn't wonder if nginx has some too :) 至少lighttpd有可怕的fastcgi错误,我不知道nginx是否有一些:)
  • Django is dying with a traceback in an internal system that is not properly catched and closes the fastcgi server which you can't see from the client. Django正在内部系统中追踪死机而没有正确捕获并关闭了客户端无法看到的fastcgi服务器。 In that situation wrap the fastcgi server application call and try/except it to print the exception. 在那种情况下,包装fastcgi服务器应用程序调用并尝试/除外它来打印异常。

But server log and config would be great. 但服务器日志和配置会很棒。

FastCGI is not to blame for this. FastCGI不应该归咎于此。

I ran into exactly the same issue using nginx/gunicorn. 我使用nginx / gunicorn遇到了完全相同的问题。 Reducing the response size to less than 32k (in the specific case using the spaceless tag in the template) solved it. 将响应大小减小到小于32k(在特定情况下使用模板中的spaceless标签)解决了它。

As dwc says, it's probably a hard limit due to the way nginx uses address space. 正如dwc所说,由于nginx使用地址空间的方式,它可能是一个硬限制。

try to raise "gzip_buffers" may help. 尝试提高“gzip_buffers”可能有所帮助。

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

I'm running very similar configurations to this both on my webhost (Webfaction) and on a local Ubuntu dev server and I don't see any problems. 我在我的webhost(Webfaction)和本地Ubuntu开发服务器上运行非常类似的配置,我没有看到任何问题。 I'm guessing it's a time-out or full buffer that's causing this. 我猜这是一个超时或完全缓冲区导致这种情况。

Can you post the output of the nginx error log? 你可以发布nginx错误日志的输出吗? Also what version of nginx are you using? 你还在使用什么版本的nginx?

As a side note it may be worth looking at django-logging to find out what your fastcgi process is doing. 作为旁注,可能值得查看django-logging以了解您的fastcgi进程正在做什么。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Nginx + FastCGI阻止呼叫 - Nginx + FastCGI with blocking calls 通过 fastCGI 为 nginx 运行 python - Running python through fastCGI for nginx 裸露最小flup fastcgi服务器无法与Nginx一起使用 - Bare minimal flup fastcgi server not working with Nginx 在Ubuntu上使用Nginx通过FastCGI运行Python - Running Python through FastCGI with nginx on Ubuntu 使用 django + fastcgi Z6E9552C9BD8E61C60F277C21220 提供来自 nginx 的 static 文件 - Serving static files from nginx with django + fastcgi debian 在stderr中发送的FastCGI:“主要脚本未知”-Nginx和Silex - FastCGI sent in stderr: “Primary script unknown” - nginx and silex 当运行nginx + python flask + python-daemon时:上游发送了不支持的FastCGI协议版本91 - When running nginx + python flask + python-daemon: upstream sent unsupported FastCGI protocol version 91 我正在使用fastcgi运行Nginx,我是否还需要提供python应用程序? - I'm running nginx with fastcgi, is that all I need to serve python apps also? 当使用nginx和fastcgi时,Django @login_required导致重定向循环 - Django @login_required cause redirects loop when using nginx and fastcgi Django Windows IIS Fastcgi 部署问题(wfastcgi TypeError: 'module' object is not callable) - Django Windows IIS Fastcgi Deploy problem (wfastcgi TypeError: 'module' object is not callable)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM