замирает скачивание файлов

tswiah at innovativemarketing.com.ua tswiah at innovativemarketing.com.ua
Wed Oct 24 23:14:33 MSD 2007


Господа, подскажите, куда копать.

Ситуация такова: имеется довольно нагруженный файловый сервис на линуксе. 
nginx работает как фронтэнд: проксирует на апач практически все, кроме 
мелкой статики, и работает с fastcgi для скриптов, которые используются 
для собственно скачивания файлов. Файлы отдаются с помощью X-Accel-Redirect.
Трафика сейчас в районе 100 мегабит (бывает и до 115), однако периодически 
возникает проблема:
скачивание файла просто застывает в какой-то момент.

Железо:
- intel core 2 quad
- 4 gb ram
- "типа железный raid" интеловый, на 3 винта, уровень 0, работающий с 
помощью dmraid
uptime в районе 2, в пиковой нагрузке - около 4

sysctl:
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_keepalive_time = 1800

Конфиг nginx:

=== nginx.conf ===

worker_processes 4;

worker_rlimit_nofile 10240;
worker_rlimit_sigpending 32768;
worker_priority 5;

events {
     worker_connections  20480; 
}

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

http {
     include       /etc/nginx/mime.types;
     default_type  application/octet-stream;

'"$upstream_response_time"';

     access_log  /var/log/nginx/access.log;

     gzip on;
     gzip_proxied any;
     gzip_min_length  10240;
     gzip_buffers     32 64k;
     gzip_types       text/html application/x-javascript text/css text/xml 
text/plain;

     client_header_timeout  60;
     client_body_timeout    60;
     send_timeout           120;

     client_max_body_size       1800m;
     client_body_buffer_size    128k;
     client_header_buffer_size    4k;
     large_client_header_buffers  16 8k;

     sendfile       on;
     sendfile_max_chunk 1024k;
     tcp_nopush     on;
     tcp_nodelay    on;
     output_buffers   32 256k;
     postpone_output  1460;

     lingering_time     30;
     lingering_timeout  6;
     reset_timedout_connection  on;

     keepalive_timeout  0;
     optimize_server_names on;

     proxy_read_timeout          180;
     proxy_connect_timeout       60;
     proxy_send_timeout          180;

     msie_padding                on;

     proxy_buffer_size           32K;
     proxy_buffers               64 512K;
     proxy_busy_buffers_size     1024K;
     proxy_temp_file_write_size  1024K;

     server {
         listen       <ip_address>:80 default backlog=1024 rcvbuf=131072 
sndbuf=1048576 deferred;
         server_name  <server_name>;

        location / {
                 proxy_pass      http://<ip_of_backend>;
                 proxy_redirect     off;
                 proxy_set_header  Host       $host;
                 proxy_set_header  X-Real-IP  $remote_addr;
                 proxy_set_header  REMOTE_ADDR  $remote_addr;
                 proxy_set_header  REMOTE_USER  $remote_user;
                 proxy_set_header  HTTP_COOKIE  $http_cookie;
                 proxy_set_header  REQUEST_METHOD  $request_method;

                 proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
         }

         location /img {
                 root /var/www/<site>/htdocs/www;
         }

         location /js {
                 root /var/www/<site>/htdocs/www;
         }

         location /css {
                 root /var/www/<site>/htdocs/www;
         }

         location /favicon.ico {
                 root /var/www/<site>/htdocs/www;
         }

         location /download/ {
                 root /var/www/<site>/fcgi;
                 if ($uri ~ '^/download/(.*)$') {
                         set $file $1;
                 }
                 rewrite ^/download/(.*) 
/download/index_dload.php?url=$file 
last;
         }

         location ~ ^/download/.+\.php$ {
             fastcgi_pass   unix:/tmp/spawn-fcgi.socket;
             fastcgi_index  index_test.php;

             fastcgi_param  SCRIPT_FILENAME 
/var/www/<site>/fcgi$fastcgi_script_name;
             fastcgi_param  QUERY_STRING     $query_string;
             fastcgi_param  REQUEST_METHOD   $request_method;
             fastcgi_param  REQUEST_URI      $request_uri;
             fastcgi_param  CONTENT_TYPE     $content_type;
             fastcgi_param  CONTENT_LENGTH   $content_length;
         }
     }

=== nginx.conf ===

Буду очень признателен за любые подсказки.

-- 
Best,
 	Yaroslav Tarasenko aka Taras Tswiah






More information about the nginx-ru mailing list