Странные вещи происходят с nginx/0.6.29 при включенном gzip сжатии.

subscribe at divog.com.ru subscribe at divog.com.ru
Sun Oct 26 16:05:01 MSK 2008


Приветствую.

Стоит nginx 0.6.29. Раздает статику и проксирует остальное на apache.
Все работает отлично, пока не включаю сжатие средствами nginx.

Когда сжатие включено, то на клиенте наблюдаю следующую картину: в ответ на
запрос приходит 8 файлов (сжаты, все ок), затем от сервера молчание в
течении примерно полутора минут, затем приходят остальные файлы (сжаты, все
ок).

Игрался с одновременной отдачей одного и того же контента апачем и nginx-ом,
включал выключал сжатие в nginx/apache и т.п.

Вывод один: если включаю сжатие в nginx, приходит ровно 8 файлов
(html|js|css) нормально, после чего следует затык примерно на полторы
минуты. Если страница содержит менее 8 text/plain файлов, то загружается
соотв. нормально.
Апач все отдает в любом (сжатом/несжатом) виде нормально, ngxin без сжатия,
тоже отдает все нормально.

Со стороны сервера логи и т.п. пока не смотрел т.к. пока что смутно понимаю,
что и где посмотреть можно в такой ситуации.
Решил спросить у сообщества, может это какой legacy баг, или вообще не баг?
Мониторил top, думал может там, что висит эти 1.5 минуты, но нет - тишь да
благодать.

Попутно буду рад подсказкам где и что можно посмотреть на сервере, дабы
понять корни проблемы.

P.S.
Sendfile, tcp_nopush, tcp_nodelay отключать пробовал.

./nginx -V
nginx version: nginx/0.6.29
built by gcc 4.1.2 20070626 (Red Hat 4.1.2-14)
configure arguments: --with-http_stub_status_module
--with-pcre=/tmp/pcre-4.4


Конфиг:

pid /usr/local/nginx/logs/nginx.pid;
error_log /usr/local/nginx/logs/error_log warn;

events {
    worker_connections  1024;
}


http {
        error_page 500 502 503 504 =503 /error/50x.html;
        error_page 404 /error/404.html;
        error_page 403 /error/403.html;

        log_format main '$remote_addr - $remote_user [$time_local] '
                        '"$request" $status $bytes_sent '
                        '"$http_referer" "$http_user_agent" '
                        '"$gzip_ratio"';

        log_format download '$remote_addr - $remote_user [$time_local] '
                        '"$request" $status $bytes_sent '
                        '"$http_referer" "$http_user_agent" '
                        '"$http_range" "$sent_http_content_range"';

        client_max_body_size 10m;

        gzip off;
        gzip_disable "MSIE [1-6]\.";
        gzip_min_length  1100;
        gzip_types      text/plain;
        #gzip_proxied off;
        gzip_proxied any;

        sendfile         on;
        tcp_nopush       on;
        tcp_nodelay      on;

        limit_zone download $binary_remote_addr 10m;

        server {
                listen 213.1xx.xxx.xxx;
                server_name name.ru;

                access_log /usr/local/nginx/logs/access_log main;

                location / {
                        proxy_pass http://127.0.0.1:9101/index.php/;
                        proxy_set_header Host $host;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
                        proxy_connect_timeout 10;
                        proxy_next_upstream error off;
                }

                location ~ /\.svn {
                        deny  all;
                }

                location ~ ^/(images|static|error)/ {
                        root /var/web/server/public/;
                }
 
               location /download {
                    root /var/web/server/public/;
                    expires 1h;
                    add_header Cache-Control private;
                    limit_conn download 1;
                    internal;
                }

                location /nginx-status {
                        stub_status on;
                        access_log   off;
                        allow 127.0.0.1;
                        deny all;
                }
        }
}

Заранее спасибо.


More information about the nginx-ru mailing list