у нас есть запрос на защиту домена путем ограничения доступа к диапазонам 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.