Проблема усечения Nginx + fastcgi - PullRequest
10 голосов
/ 02 октября 2008

Я использую сайт Django, использующий интерфейс fastcgi для nginx. Однако некоторые страницы обрезаются (то есть источник страницы просто останавливается, иногда в середине тега). Как мне это исправить (дайте мне знать, какая дополнительная информация нужна, и я опубликую ее)

подробности:

Я использую 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

Конфигурация 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;
        }
}

Ответы [ 6 ]

7 голосов
/ 07 марта 2011

У меня была такая же проблема при запуске Nagios на nginx. Я наткнулся на твой вопрос, когда гуглил ответ, и, прочитав ответы «отказано в разрешении», меня это поразило (и, возможно, это поможет тебе):

  • 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

  • Исправлено! (и спасибо за вашу косвенную помощь)

5 голосов
/ 23 декабря 2010

Проверьте журналы ошибок на наличие ошибок "Permission denied" при записи файлов .../nginx/tmp/.... Nginx будет работать нормально, если ему не нужно временное пространство, а это обычно происходит на границах 32 КБ. Если вы обнаружите эти ошибки, убедитесь, что каталог tmp доступен для записи пользователю, который nginx запускает как.

3 голосов
/ 02 октября 2008

Какой интерфейс fastcgi вы используете и как. Это провал? Если да, вставьте способ, которым вы вызываете сервер и как он подключен к nginx. Без этой информации просто гадать, что может пойти не так.

Возможные проблемы:

  • nginx глючит. По крайней мере, у lighttpd есть ужасные ошибки fastcgi, я не удивлюсь, если у nginx тоже есть :))
  • Django умирает с трассировкой во внутренней системе, которая не перехватывается должным образом, и закрывает сервер fastcgi, который вы не видите от клиента. В этой ситуации оберните вызов приложения сервера fastcgi и попробуйте / исключите его, чтобы напечатать исключение.

Но журнал и конфигурация сервера были бы хороши.

2 голосов
/ 17 мая 2011

FastCGI не виноват в этом.

Я столкнулся с точно такой же проблемой, используя nginx / gunicorn. Уменьшение размера ответа до менее 32 КБ (в конкретном случае использование тега spaceless в шаблоне) решило эту проблему.

Как говорит dwc, вероятно, это жесткое ограничение из-за того, как nginx использует адресное пространство.

2 голосов
/ 23 марта 2009

попытка поднять "gzip_buffers" может помочь.

см. Здесь: http://blog.leetsoft.com/2007/7/25/nginx-gzip-ssl

0 голосов
/ 23 июля 2009

Я использую очень похожие конфигурации как на своем веб-хосте (Webfaction), так и на локальном сервере разработки Ubuntu, и я не вижу никаких проблем. Я предполагаю, что причиной является тайм-аут или полный буфер.

Можете ли вы опубликовать вывод журнала ошибок nginx? И какую версию nginx вы используете?

В качестве примечания стоит посмотреть django-logging , чтобы узнать, что делает ваш процесс fastcgi.

...