Падение сервера при зажатии кнопки F5

Александр Рочев foxr на mail.ru
Пт Фев 18 00:16:12 MSK 2011


Доброй ночи всем.
Сегодня случайным образом выявилась большая проблема на сайте. Случайно зажав кнопку F5 в админке сайта получилось заставить сервер впасть в ступор, в top появилась куча httpd процессов, нагрузка на процессор 100% и сайт перестает отвечать (404 ошибка).
Еще так же в админке есть пункт меню, в которых заходя идет запрос на второй сервер, с которого ему присылаются данные и попадают во фрейм. Так вот если на этой странице нажать F5 и держать, то снова возникает тьма процессов httpd, которые жрут 100% проца, но уже nginx отвечает на сайте 504 ошибку. 

Как можно средствами nginx ограничить количество запросов с одного допустим ip к серверу или может в конфиге ошибка, которая так кладет сайт. Пробовал на разных сайтах держать F5 им хоть бы что. Кто может сталкивался с такой проблемой, помогите, не радует что может сделать F5 с сайтом....

Сервер 6 ядерный, памяти 32гб и рэйд 5 на скази дисках.
Работает связка nginx 0.8.5.4 + apache

Настройки Апача 
<IfModule mpm_prefork_module>
    StartServers          10
    MinSpareServers       15
    MaxSpareServers      30
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>
Timeout 60
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 5

user  www www;

worker_processes  8;

error_log  /pub/log/nginx/error_log  notice;

pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
    use kqueue;
        }

http {
    include       mime.types;
    default_type  application/octet-stream;
    server_names_hash_bucket_size 1024;
    client_header_timeout  1m;
    client_body_timeout    1m;
    send_timeout           1m;
    keepalive_timeout      1m;
    sendfile        on;
    client_max_body_size   20m;
    proxy_connect_timeout  60;
    proxy_send_timeout     60;
    proxy_read_timeout     60;
    proxy_buffer_size      128k;
    proxy_buffers          64 128k;
    proxy_busy_buffers_size 128k;
    proxy_buffering        on;
    large_client_header_buffers 16 32k;
    gzip                   on;
    gzip_static            on;
    gzip_min_length        1000;
    gzip_proxied           any;
    gzip_types             text/plain text/xml application/xml application/x-javascript text/javascript text/css text/json;
    gzip_disable           "msie6";
    gzip_comp_level        6;


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

 access_log  /pub/log/nginx/access_log  main;

server {
        listen 80 default rcvbuf=8k sndbuf=16k;
            }

       }


upstream bak {
    server 127.0.0.1:port;
             }


server {

reset_timedout_connection on;

listen ip:80;

server_name    test.ru www.test.ru;

location ~* ^.+\.(htm|html|jpg|jpeg|gif|swf|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
                        root /pub/home/test.ru/www;

access_log off;
expires 5h;
        }

location ~ /\.ht {
                deny  all;
                    }

location / {

        proxy_set_header        Host            $http_host;

        proxy_set_header 	X-Real-IP $remote_addr;

        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for; # $remote_addr;

        proxy_pass http://bak/;
        proxy_redirect http://test.ru:2003/ http://test.ru/;
        proxy_redirect http://www.test.ru:2003/ http://www.test.ru/;

        }
        }






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