Тема: Nginx как фильтр перед Apache без переконфигурирования Apache

Задача - сбросить DDoS типа "Slow Loris" http://en.wikipedia.org/wiki/Slowloris не и другие приятный мелочи можно использовать.

1. Инсталлируем и конфигурируем Nginx

# cat /etc/nginx/nginx.conf
user nginx;
worker_processes 2;
# устанавливаем ulimit в большое значение, актуально большим проектам
worker_rlimit_nofile 20480; 
error_log /var/log/nginx/error.log; 
pid /var/run/nginx.pid;
events {
     # 
     worker_connections 10240; 
     }
http {
     include /etc/nginx/mime.types;
     default_type application/octet-stream; 
     log_format main '$remote_addr - $remote_user [$time_local] "$request" '
      '$status $body_bytes_sent "$http_referer" '
      '"$http_user_agent" "$http_x_forwarded_for"';
     log_format upstream '$remote_addr - - [$time_local] "$request" $status '
      'upstream $upstream_response_time request $request_time '
      '[for $host ($scheme) via $upstream_addr] [mime: $sent_http_content_type] "$http_x_forwarded_for"';
     # Надо включать по потребностям 
     #access_log /var/log/nginx/access.log upstream;
     # буффер нам ненужен
     proxy_buffering off; 
     # передаем информацию о headre'ах apache
     proxy_set_header Host $http_host; 
     # устанавливаем для apache с mod_extract_forwarded возможность узнать настоящий REMOTE_ADDR и т.д.
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     # таймаут, apache около 300 сек
     proxy_read_timeout 600; 
     # по возможности используемым память
     proxy_temp_path /dev/shm;
     # для закачивания файлов до 100 мб
     client_max_body_size 100m; 
     client_body_buffer_size 128k;
     # по возможности используемым память
     client_body_temp_path /dev/shm; 
     proxy_buffers 8 16k;
     proxy_buffer_size 32k; 
     sendfile on;
     keepalive_timeout 65; 
     server {
          listen 111.111.111.111:81;
          server_name _; 
          location / { proxy_pass http://111.111.111.111:80; }
          # Это дает возможность показывать нормальное сообщение когда apache недоступен или что-то блокируется
          error_page 502 /apache_down.html;
          location = /apache_down.html { root /usr/share/nginx/html; }
          error_page 403 /forbidden.html;
          location = /forbidden.html { root /usr/share/nginx/html; }
     }
}

2. В apache устанавливаем mod_extract_forwarded и настраиваем его, по сути меняем тольео одну строчку

- MEFaccept 1.2.3.4 1.2.3.5
+ MEFaccept 127.0.0.1 111.111.111.111

3. Проверяем, путем захода на http://mydomain.tls:81/blablabla если все работает то перекидываем запросы идущие на 80 порт на 81

iptables -t nat -A PREROUTING -d 111.111.111.111 -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 81