From 8315d5915599b0d5241ef3a921f9b788b71dcd3b Mon Sep 17 00:00:00 2001 From: perl Date: Wed, 16 Oct 2024 15:29:35 +0300 Subject: [PATCH] add req limits --- Dockerfiles/Dockerfile_devserver | 3 +-- configuration/_global_includes.conf | 2 ++ configuration/_includes.conf | 3 ++- configuration/limit_req.conf | 2 ++ configuration/limit_req_zones.conf | 29 +++++++++++++++++++++++++++++ nginx_configs/nginx.conf | 4 ++++ sites-enabled/http_redirect.conf | 22 +++++++++++----------- sites-enabled/upstreams.conf | 7 ------- 8 files changed, 51 insertions(+), 21 deletions(-) create mode 100644 configuration/_global_includes.conf create mode 100644 configuration/limit_req.conf create mode 100644 configuration/limit_req_zones.conf delete mode 100644 sites-enabled/upstreams.conf diff --git a/Dockerfiles/Dockerfile_devserver b/Dockerfiles/Dockerfile_devserver index 9a612ed..90e83b1 100644 --- a/Dockerfiles/Dockerfile_devserver +++ b/Dockerfiles/Dockerfile_devserver @@ -2,8 +2,7 @@ FROM nginx:stable-alpine COPY --chmod=0440 ["./locations", "/etc/nginx/locations"] COPY --chmod=0440 ["./configuration", "/etc/nginx/configuration"] COPY --chmod=0440 ["./error-pages", "/etc/nginx/error-pages"] -COPY --chmod=0440 ["./resources", "/var/www/html/resources"] -COPY --chmod=0440 ["./resources", "/var/www/html/resources"] +COPY --chmod=0755 ["./resources", "/var/www/html/resources"] COPY --chmod=0440 ["./nginx_configs/nginx.conf", "/etc/nginx/nginx.conf"] ARG CONT_IMG_VER diff --git a/configuration/_global_includes.conf b/configuration/_global_includes.conf new file mode 100644 index 0000000..bdf6cf7 --- /dev/null +++ b/configuration/_global_includes.conf @@ -0,0 +1,2 @@ +# Включения в блок http (nginx.conf) +include /etc/nginx/configuration/limit_req_zones.conf; \ No newline at end of file diff --git a/configuration/_includes.conf b/configuration/_includes.conf index ffa31e0..8898b8f 100644 --- a/configuration/_includes.conf +++ b/configuration/_includes.conf @@ -1,2 +1,3 @@ include configuration/compression.conf; -include configuration/error_pages.conf; \ No newline at end of file +include configuration/error_pages.conf; +include configuration/limit_req.conf; \ No newline at end of file diff --git a/configuration/limit_req.conf b/configuration/limit_req.conf new file mode 100644 index 0000000..6389ced --- /dev/null +++ b/configuration/limit_req.conf @@ -0,0 +1,2 @@ +#limit_req zone=global_limits burst=10; +limit_req zone=global_limits burst=30 delay=8; \ No newline at end of file diff --git a/configuration/limit_req_zones.conf b/configuration/limit_req_zones.conf new file mode 100644 index 0000000..9f49a73 --- /dev/null +++ b/configuration/limit_req_zones.conf @@ -0,0 +1,29 @@ +# Описание зон ограничения количества запросов + +#Используем переменную NGINX $binary_remote_addr, которая содержит двоичное представление IP-адреса клиента. +#Это означает, что мы ограничиваем каждый уникальный IP-адрес частотой запросов, определенной третьим параметром rate. +#(Используем эту переменную, потому что она занимает меньше места, чем строковое представление IP-адреса клиента, $remote_addr). + + +#Информация о состоянии примерно для 16 000 IP-адресов занимает 1МБайт, +#поэтому созданная зона может хранить около 160 000 адресов. + + +#Тут частота не может превышать 10 запросов в секунду 10 request/second. +#NGINX фактически отслеживает запросы с точностью до миллисекунды, +#поэтому этот предел соответствует 1 запросу каждые 100 миллисекунд (мс). +#Запрос отклоняется, если он поступает менее чем через 100 мс после предыдущего разрешенного. + +limit_req_zone $binary_remote_addr zone=global_limits:10m rate=10r/s; + +#Директива limit_req_zone задает параметры ограничения скорости и зоны общей памяти, +#но на самом деле не ограничивает скорость запросов. Для этого нужно применить ограничение +#к определенному блоку location или server, включив туда директиву limit_req. + +#Например +# server { +# location /login/ { +# limit_req zone=mylimit; +# proxy_pass http://my_upstream; +# } +# } \ No newline at end of file diff --git a/nginx_configs/nginx.conf b/nginx_configs/nginx.conf index f1390a3..d872f05 100644 --- a/nginx_configs/nginx.conf +++ b/nginx_configs/nginx.conf @@ -25,6 +25,10 @@ http { error_log /var/log/nginx/error.log debug; gzip on; + + #Include http includes + include /etc/nginx/configuration/_global_includes.conf; + include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*.conf; } diff --git a/sites-enabled/http_redirect.conf b/sites-enabled/http_redirect.conf index 598e989..c15264a 100644 --- a/sites-enabled/http_redirect.conf +++ b/sites-enabled/http_redirect.conf @@ -2,17 +2,17 @@ #Для сложных маршрутов с регулярным выражением #Требует ресурсы на обработку регулярного выражения -# server { -# listen 80 default_server; -# listen [::]:80 default_server; -# rewrite ^(.*) https://$host$1 permanent; -# } + server { + listen 80 default_server; + listen [::]:80 default_server; + rewrite ^(.*) https://$host$1 permanent; + } #Не требует ресурсов для обработки запроса #Уязвим для атак через Host-заголовок -server { - listen 80; - listen [::]:80; - server_name _; - return 301 https://$host$request_uri; -} \ No newline at end of file +#server { +# listen 80 default_server; +# listen [::]:80 default_server; +# server_name _; +# return 301 https://$host$request_uri; +#} diff --git a/sites-enabled/upstreams.conf b/sites-enabled/upstreams.conf deleted file mode 100644 index e478f44..0000000 --- a/sites-enabled/upstreams.conf +++ /dev/null @@ -1,7 +0,0 @@ -upstream rr_backend { - server 127.0.0.1:8080 weight=5 max_fails=3 fail_timeout=60s; - server 10.9.0.9:80 weight=2 max_fails=3 fail_timeout=60s; - server google.com weight=3 max_fails=3 fail_timeout=60s; - server ya.ru backup; - keepalive 8; -}