Высокопроизводительный многофункциональный веб-сервер

http://nginx.org



 ./configure --with-http_realip_module
make install

/usr/local/nginx/sbin/nginx     собственно сервер
/usr/local/nginx/conf           конфигурационный каталог
/usr/local/nginx/logs           логфайлы
/usr/local/nginx/proxy_temp     кэш для proxy и вебакселератора

имеет смысл перелинковать часть директорий в привычные места

ln -s /usr/local/nginx/conf            /etc/nginx

rmdir /usr/local/nginx/logs ; mkdir /var/log/nginx ;
ln -s /var/log/nginx                   /usr/local/nginx/logs

rmdir /usr/local/nginx/proxy_temp ; mkdir -p /var/log/nginx/proxy_temp
ln -s /var/log/nginx/proxy_temp        /usr/local/nginx/proxy_temp

Либо прочтя ./configure --help сразу сконфигурить как надо
./configure --conf-path=/etc/nginx               \
        --http-log-path=/var/log/nginx           \
 --http-proxy-temp-path=/var/log/nginx/proxy_temp



nginx -t # тестирование конфигов

kill -HUP `cat nginx.pid` # перечитывание конфига

nginx -s [stop|quit|reload|reopen]

# глобальные конфиг-параметры можно подставлять в командной строке
nginx -g "pid /var/run/nginx.pid; worker_processes `sysctl -n hw.ncpu`;"




http://nginx.org/ru/docs/http/ngx_http_gzip_module.html
################## gzip    контекст: http #######################
  gzip            on;
  gzip_min_length 1000;
  gzip_proxied    expired no-cache no-store private auth no_last_modified;
  gzip_types      text/plain application/xml;
# gzip_http_version 1.1;
################## gziping #######################




http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_buffering
  proxy_pass                 http://181.176.66.171:80/;
  proxy_redirect             off;
  proxy_set_header           Host             $host;
  proxy_set_header           X-Real-IP        $remote_addr;
  proxy_set_header           X-Forwarded-For  $proxy_add_x_forwarded_for;
  client_max_body_size       10m;
  client_body_buffer_size    128k;
  proxy_connect_timeout      90;       # 60
  proxy_send_timeout         90;       # 60
  proxy_read_timeout         90;       # 60
  proxy_buffer_size          4k;
  proxy_buffers              4 32k;
  proxy_busy_buffers_size    64k;
  proxy_temp_file_write_size 10m;
  proxy_max_temp_file_size   0;



   server {
        listen       181.176.66.164:80;
        server_name  suong.su www.suong.su;

        location / {
            proxy_pass   http://127.0.0.164;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
   #  proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;

        }

        # Static files location
        location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|mp3|avi|mpeg|mpg|mov)$ {
            root   /home/www/$server_name;
        }
    }

# На проксируемом apache вписать в конфиг RPAF,
# чтоб вместо nginx'овского подставлялся IP web-клиента

RPAFenable On
RPAFproxy_ips 127.0.0.1 181.176.66.171
RPAFsethostname On
RPAFheader X-Real-IP

Если на фронте стоит nginx, то аналогичная настройка
на принимающем nginxe требует включения модуля http_realip_module
http://nginx.org/ru/docs/http/ngx_http_realip_module.html

 ./configure --with-http_realip_module

   set_real_ip_from 194.63.140.119;
   real_ip_header X-Forwarded-For;
   real_ip_recursive on;




Ограничение числа одновременных коннектов с одного IP
http://nginx.org/ru/docs/http/ngx_http_limit_conn_module.html

limit_conn_zone $binary_remote_addr zone=peripaddr:10m;
limit_conn_zone $server_name        zone=perserver:10m;

# для nginx 0.7 используется старый формат этой директивы
limit_zone peripaddr $binary_remote_addr 10m;

server {
    ...
    limit_conn perserver 100;
    ...
  location  /download/ {
    limit_conn peripaddr 10;
    }
  location  ~ \.rar$ {
    limit_conn peripaddr 1;
    }
}


Ограничение темпа запросов с одного IP
http://nginx.org/ru/docs/http/ngx_http_limit_req_module.html

Ограничение скорости на один IP
http://nginx.org/ru/docs/http/ngx_http_core_module.html#limit_rate

server {
    if ($slow) {         set $limit_rate 4k;     }


  location /flv/ {
    flv;
    limit_rate_after 500k;
    limit_rate       50k;
  }
}

Условия на активацию директив
http://nginx.org/ru/docs/http/ngx_http_rewrite_module.html#if
http://nginx.org/ru/docs/http/ngx_http_core_module.html#variables

$time_local
$time_iso8601

if ($slow) {
    limit_rate 10k;
}




DeflateEnable on
DeflateDisableRange "MSIE 4."
DeflateProxied on
# DeflateHTTP 1.0




https://habr.com/ru/companies/slurm/articles/329876/

Ограничивать скорость можно по обращению к url, или с конкретного IP-клиента
request_uri и binary_remote_addr соответственно.

# описываем ограничение - 60 запросов в минуту с одного IP,
# кэш зоны 20 Мб примерно for ~320,000 IPs
  limit_req_zone $binary_remote_addr zone=by_ip60:20m rate=60r/m;

   # пропускать по одному, остальным отказывать
   location /burst0 { limit_req zone=by_ip60;  }

   # burst: burst-штук пустить с задержкой, остальным отказать
   location burst5 { limit_req zone=by_ip60 burst=5;  }

   # nodelay: burst-штук пустить сразу, остальным отказать
   location /burst5_nd{limit_req zone=by_ip60 burst=5 nodelay; }

   # частичный delay: первые 8 сразу, еще 4 с задержкой, остальным отказ
   location /burst12_delay8{limit_req zone=by_ip60 burst=12 delay=8; }


https://blog.nginx.org/blog/rate-limiting-nginx
Rate limit from anyone who is not on an "allowlist" ($limit = 0;)

# Список "своих"        # своих не трогать,
geo $limit { default 1;                  # остальных прижимать
       10.0.0.0/8    0;
      192.168.0.0/24 0;
}
# Список "чужих"        # чужих прижимать,
geo $limit { default 0;                  # остальных не трогать
    66.249.81.0/24   1; # google
    213.180.203.0/24 1; # yandex
    68.180.220.0/24  1; # yahoo
}

# $limit = 0  =>  $limit_key = ''
# $limit = 1  =>  $limit_key = $binary_remote_addr
map $limit $limit_key {     0 "";    1 $binary_remote_addr;}

   limit_req_zone $limit_key          zone=req_zone_5:10m rate=5r/s;
   limit_req_zone $binary_remote_addr zone=req_zone_svoi_25:10m rate=25r/s;

   . . .
   # свои под req_zone_5 не попадут
   limit_req zone=req_zone_5 burst=10 nodelay;
   # чужие попадут в обе зоны, но к чужим применится более жесткая req_zone_5
   limit_req zone=req_zone_svoi_25 burst=20 nodelay;
. . .

Популярность: 19, Last-modified: Sat, 27 Jul 2024 07:32:51 GmT