Фильтрация IP-адресов на Apache-nginx-Combo

Фильтрация IP-адресов на Apache-nginx-Combo

у нас есть запрос на защиту домена путем ограничения доступа к диапазонам IP-адресов WAF-Cloud. На сервере запущен Apache для PHP и nginx в качестве обратного прокси-сервера, поэтому цепочка от браузера до веб-сайта предположительно следующая: Клиент <-> DNS <-> WAF <-> nginx <-> Apache

Изучив логи, я обнаружил, что запросы, выполняемые nginx, поступают с IP-адресов WAF, на которые Apache не отвечает (я вижу свой собственный IP-адрес в журналах при переходе на сайт). nginx настроен с помощью Plesk на работу в режиме прокси с интеллектуальной обработкой статических файлов.

Применение директив к Apache (htaccess) приводит к ошибке 403, что неудивительно, поскольку запросы от WAF-сервера не поступают.

Я не смог применить директивы к nginx с помощью Plesk (Дополнительные директивы). Это дает мне сообщение об ошибке. Я попробовал

location / {
    allow 199.83.128.0/21;
    allow 2a02:e980::/29;
    deny all;
}

nginx: [emerg] дублирующееся расположение "/" в /var/www/vhosts/system/example.co/conf/vhost_nginx.conf:1 nginx: проверка файла конфигурации /etc/nginx/nginx.conf не пройдена

Этот сервер запускает Plesk 17.8.11, nginx 1.14.2 и Apache 2.4.7 на Ubuntu 14.04.6. Этот сервер размещает несколько доменов.

Правильный ли способ решения этой проблемы? Почему я получаю эту ошибку?

Добавляем conf-файл домена, содержащий директиву location:

#ATTENTION!
#
#DO NOT MODIFY THIS FILE BECAUSE IT WAS GENERATED AUTOMATICALLY,
#SO ALL YOUR CHANGES WILL BE LOST THE NEXT TIME THE FILE IS GENERATED.

server {
    listen 00.000.00.00:443 ssl http2;

    server_name example.com;
    server_name www.example.com;
    server_name ipv4.example.com;

    ssl_certificate             /opt/psa/var/certificates/scfPNclj5;
    ssl_certificate_key         /opt/psa/var/certificates/scfPNclj5;
    ssl_client_certificate      /opt/psa/var/certificates/scf58Rxns;

    client_max_body_size 128m;

    proxy_read_timeout 300;

    root "/var/www/vhosts/example.com/httpdocs";
    access_log "/var/www/vhosts/system/example.com/logs/proxy_access_ssl_log";
    error_log "/var/www/vhosts/system/example.com/logs/proxy_error_log";

    if ($host ~* ^superglass\.de$) {
        rewrite ^(.*)$ https://www.example.com$1 permanent;
    }

    #extension letsencrypt begin
    location ^~ /.well-known/acme-challenge/ {
        root /var/www/vhosts/default/htdocs;

        types { }
        default_type text/plain;

        satisfy any;
        auth_basic off;
        allow all;

        location ~ ^/\.well-known/acme-challenge.*/\. {
            deny all;
        }
    }
    #extension letsencrypt end

    location / {
        proxy_pass https://00.000.00.00:7081;
        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-Accel-Internal /internal-nginx-static-location;
        access_log off;

    }

    location /internal-nginx-static-location/ {
        alias /var/www/vhosts/example.com/httpdocs/;
        internal;
    }

    location ~ ^/(plesk-stat|awstats-icon|webstat|webstat-ssl|ftpstat|anon_ftpstat) {
        proxy_pass https://00.000.00.00:7081;
        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-Accel-Internal /internal-nginx-static-location;
        access_log off;

    }

    location ~ "^/files/" {
        proxy_pass https://00.000.00.00:7081;
        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-Accel-Internal /internal-nginx-static-location;
        access_log off;

    }

    add_header X-Powered-By PleskLin;

    include "/var/www/vhosts/system/example.com/conf/vhost_nginx.conf";
}

server {
    listen 00.000.00.00:80;

    server_name example.com;
    server_name www.example.com;
    server_name ipv4.example.com;

    client_max_body_size 128m;

    proxy_read_timeout 300;

    if ($host ~* ^superglass\.de$) {
        rewrite ^(.*)$ https://www.example.com$1 permanent;
    }

    return 301 https://$host$request_uri;
}

Есть еще один файл, включенный в 'var/www/...', который пуст. Вероятно, мне следует добавить туда свои вещи.

решение1

Забудьте о настройке местоположения в "Дополнительных директивах Nginx". Прокрутите страницу "Настройки Apache и nginx" Plesk до раздела "Запретить доступ к сайту". Там вы можете просто ввести свои IP-адреса или диапазоны IP-адресов, которые вы хотите "разрешить" или "запретить", и Plesk обработает их правильно для вас, независимо от того, используете ли вы режим Nginx-only или proxy.

Связанный контент