Падение сервера при зажатии кнопки 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