Из-за чего не работает защита?

Ссылка скопирована
1 ответ

Сейчас ситуация такая: я новичок в nginx. В процессе заливания маленького проекта на VDS захотел ограничить количество запросов в секунду, чтобы сервер не падал. Написал конфиг, представленный ниже, однако код на python (тоже снизу) не выдаёт ошибки о перегрузке сервиса.

# Редирект с HTTP на HTTPS server { listen 80; server_name example.ru www.example.ru; return 301 https://$host$request_uri; } limit_req_zone $http_your_auth_token zone=mylimit:10m rate=30r/s; # HTTPS сервер server { listen 443 ssl; server_name example.ru www.example.ru; # SSL сертификаты ssl_certificate /etc/nginx/certs/fullchain.pem; ssl_certificate_key /etc/nginx/certs/privkey.key; # Базовые SSL настройки ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; # Логи (опционально) access_log /var/log/nginx/backend_access.log; error_log /var/log/nginx/backend_error.log; location / { limit_req zone=mylimit burst=1 nodelay; proxy_pass http://service:8080; # Заголовки для backend proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # Таймауты proxy_connect_timeout 60s; proxy_read_timeout 60s; } }
from requests import get import warnings from urllib3.exceptions import InsecureRequestWarning # Отключаем предупреждения о небезопасных запросах warnings.simplefilter('ignore', InsecureRequestWarning) for i in range(1000): res = get("https://localhost/sight/", verify=False) print(res.status_code)
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Роман IT Ответ

Если “защита” в Nginx не работает, сначала нужно уточнить, какая именно защита имеется в виду: basic auth, ограничение по IP, rate limit, deny/allow, защита директории, запрет доступа к файлам или reverse proxy auth. В Nginx порядок location и наследование директив часто важнее самой директивы защиты.

Начните с проверки итоговой конфигурации:

nginx -t
nginx -T | less

nginx -t nginx -T | less

nginx -T показывает весь конфиг с include-файлами. Часто оказывается, что защита прописана в одном server/location, а запрос реально попадает в другой.

Если это basic auth, минимальная схема такая:

location /admin/ {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

location /admin/ { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd; }

Проверьте права на .htpasswd и что Nginx worker может его читать. Если файл недоступен, в error.log будет подсказка.

Если защита по IP, учитывайте reverse proxy/CDN. При Cloudflare или другом прокси Nginx видит IP прокси, а не реального клиента. Тогда правила allow/deny нужно строить после правильной настройки real_ip:

set_real_ip_from 173.245.48.0/20;
real_ip_header CF-Connecting-IP;

set_real_ip_from 173.245.48.0/20; real_ip_header CF-Connecting-IP;

Если защита не применяется к PHP/WordPress, проверьте location precedence: запрос может попадать в location ~ .php$, где нужных директив нет. Иногда защиту нужно вынести выше или продублировать в нужном location.

Итог: смотрите итоговый конфиг, реальный location, error.log/access.log и наличие прокси. В Nginx директива может быть правильной, но не работать, если запрос обслуживает другой server block или regex-location перекрывает обычный location.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно