Оптимизация для отдачи статики

admin at sysadmins.el.kg admin at sysadmins.el.kg
Thu Oct 10 04:11:11 UTC 2013


Имеются тормоза с отдачей графики - в один поток файлы отдаются влегкую, 
при скачивании больших файлов складывается канал у клиента :) А вот с 
отдачей мелких файлов (99% файлов являются картинками с развернутой 
иерархией директорий) пачкой наблюдаются жесткие тормоза. Раздел с 
файлами  - ramfs, синхронизируется скриптами с SSD-накопителем по мере 
появления изменений на последнем.

Конфиг:

user nobody;
worker_processes 8;
worker_rlimit_nofile 8192;
worker_priority -5;
timer_resolution 100ms;

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

events {
    worker_connections 8192;
    use epoll;
}

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

    server_tokens off;
    ignore_invalid_headers on;
    if_modified_since before;
    reset_timedout_connection on;
    underscores_in_headers on;
    sendfile on;
    sendfile_max_chunk 128k;
    keepalive_requests 1000;
    keepalive_timeout 30;
    keepalive_disable msie6;
    tcp_nopush on;
    tcp_nodelay on;
    send_timeout 30;
    connection_pool_size 256;
    client_header_buffer_size 256k;
    large_client_header_buffers 4 256k;
    client_max_body_size 200M;
    client_body_buffer_size 256k;
    client_header_timeout 30;
    client_body_timeout 30;
    request_pool_size 32k;
    postpone_output 1460;
    access_log off;

    output_buffers 128 512k;

    open_file_cache max=200000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 1;
    open_file_cache_errors off;

    ssl_session_timeout 5m;
    ssl_prefer_server_ciphers on;
    ssl_session_cache  builtin:1000  shared:SSL:10m;

     server {
           listen 0.0.0.0:80 rcvbuf=16834 sndbuf=16384 backlog=32000 
default;
           server_name cdn.image.kg;
           access_log off;

           location / {
               root /var/www/ramdrive;
               expires max;
               add_header Cache-Control public;
               try_files $uri $uri/ /notfound.png;
           }
     }

    # SSL
     server {
           listen 0.0.0.0:443 ssl default_server rcvbuf=16384 
sndbuf=16384 backlog=32000 ;
           server_name cdn.image.kg;
           access_log off;

           ssl on;
           ssl_certificate /etc/nginx/ssl/cdn.image.kg.crt;
           ssl_certificate_key /etc/nginx/ssl/cdn.image.kg.key;
           ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
           ssl_ciphers  "RC4:HIGH:!aNULL:!MD5:!kEDH";

           location / {
               root /var/www/ramdrive;
               expires max;
               add_header Cache-Control public;
               try_files $uri $uri/ /notfound.png;
           }
     }
}

И еще в логах очень много такого:
2013/10/10 06:10:51 [alert] 26609#0: *13726 pread() read only 24709 of 
24711 from "/var/www/ramdrive/6/2/45/125/WD63s4ds84de254.jpg" while 
sending response to client, client: <IP>, server: cdn.image.kg, request: 
"GET /6/2/45/125/WD63s4ds84de254.jpg?code=4532ew3 HTTP/1.1", host: 
"cdn.image.kg", referrer: "https://cdn.image.kg/view.php"



Подробная информация о списке рассылки nginx-ru