Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
Nginx Error 403: Forbidden (access forbidden by rule: allow/deny directive) Linux / DevOps

Nginx 403: access forbidden by rule (allow/deny) — Устранение

Обновлено: 18.08.2026  ·  Официальная база знаний

Клиент получает ошибку 403 Forbidden при попытке доступа к админ-панели, API или служебным URL. В системном логе /var/log/nginx/error.log фиксируется срабатывание правил безопасности: access forbidden by rule, client: 198.51.100.42, server: admin.example.com, request: "GET /admin HTTP/1.1".

ДирективаПорядок примененияРезультат для клиента
allow 10.0.0.0/8;Проверяется сверху внизРазрешает доступ указанной подсети
deny all;Финальное правилоБлокирует всех клиентов, не попавших в allow (код 403)
set_real_ip_fromМодуль Real IPОпределяет реальный IP клиента за CDN/Load Balancer
  • Администратор не может попасть в защищенный раздел сайта при смене своего IP или подключении через VPN.
  • При работе через Cloudflare все запросы блокируются, так как Nginx видит IP-адрес прокси Cloudflare вместо оригинального IP клиента.
  1. Найдите блокирующие директивы deny в конфигурации Nginx:
    grep -rn "deny" /etc/nginx/
  2. Добавьте ваш актуальный публичный IP-адрес или офисную подсеть перед директивой deny all;:
    location /admin/ {
        # Разрешенные IP-адреса:
        allow 198.51.100.42;
        allow 203.0.113.0/24;
        
        # Запретить всем остальным:
        deny all;
        
        proxy_pass http://backend;
    }
  3. Если сайт работает через CDN / Cloudflare / WAF, обязательно настройте модуль ngx_http_realip_module, чтобы директивы allow/deny проверяли реальный IP посетителя:
    # В блоке http:
    set_real_ip_from 173.245.48.0/20;
    set_real_ip_from 103.21.244.0/22;
    # (добавьте все диапазоны Cloudflare)
    real_ip_header CF-Connecting-IP; # или X-Forwarded-For
    real_ip_recursive on;
  4. Проверьте конфигурацию на ошибки и выполните перезагрузку:
    sudo nginx -t
    sudo systemctl reload nginx
Важно: Директивы модуля ngx_http_access_module проверяются строго в порядке их объявления до первого совпадения. Если поместить deny all; перед allow <IP>;, доступ будет закрыт абсолютно для всех без исключения!
Практический опыт инженера: Всегда защищайте технические URI вроде `/actuator`, `/metrics`, `/.env` и `/phpmyadmin` связкой `allow ; deny all;` на уровне периметра Nginx.

Частые вопросы (FAQ)

Как разрешить доступ только локальному серверу?

Используйте комбинацию: allow 127.0.0.1; allow ::1; deny all; внутри целевого блока location.

Почему allow не работает при проксировании через HAProxy / Nginx Ingress?

Без настройки модуля real_ip Nginx видит IP-адрес балансировщика, а не клиента. Настройте директивы set_real_ip_from и real_ip_header X-Forwarded-For.

Можно ли вернуть 404 Not Found вместо 403 при срабатывании deny all?

Да, для скрытия существования админки используйте директиву error_page 403 =404 /404.html; внутри защищаемого location.

Как заблокировать доступ к скрытым файлам (.git, .env) во всех сайтах?

Добавьте в server блок: location ~ /\. { deny all; access_log off; log_not_found off; }.