Tenemos la solicitud de proteger un dominio restringiendo el acceso a los rangos de IP de una nube WAF. El servidor ejecuta Apache para PHP y nginx como servidor proxy inverso, por lo que la cadena desde el navegador hasta el sitio web es presumiblemente: Cliente <-> DNS <-> WAF <-> nginx <-> Apache
Al mirar los registros, descubrí que las solicitudes cumplidas por nginx provienen de las ips del WAF, que no fueron respondidas por Apache (veo mi propia dirección IP en los registros cuando voy al sitio web). nginx se configura mediante Plesk para estar en modo proxy con procesamiento inteligente de archivos estáticos.
La aplicación de directivas a Apache (htaccess) conduce al error 403, lo cual no es ninguna sorpresa porque no recibe solicitudes del servidor WAF.
No pude aplicar las directivas a nginx usando Plesk (directivas adicionales). Esto me da un mensaje de error. Lo intenté
location / {
allow 199.83.128.0/21;
allow 2a02:e980::/29;
deny all;
}
nginx: [emerg] ubicación duplicada "/" en /var/www/vhosts/system/example.co/conf/vhost_nginx.conf:1 nginx: falla en la prueba del archivo de configuración /etc/nginx/nginx.conf
Este servidor ejecuta Plesk 17.8.11, nginx 1.14.2 y Apache 2.4.7 en Ubuntu 14.04.6. Este servidor aloja varios dominios.
¿Es correcta la forma en que intento resolver esto? ¿Por qué recibo este error?
Agregar el archivo de configuración del dominio que contiene la directiva de ubicación:
#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;
}
Hay otro archivo incluido en 'var/www/...', que está vacío. Probablemente debería agregar mis cosas allí.
Respuesta1
Olvídese de la configuración de ubicación en "Directivas adicionales de Nginx". Desplácese hacia arriba en la página "Configuración de Apache y nginx" de Plesk hasta la sección "Denegar acceso al sitio". Allí simplemente puede ingresar sus direcciones IP o rangos de direcciones IP que desea "permitir" o "denegar" y Plesk lo manejará correctamente por usted, independientemente de si está utilizando solo Nginx o el modo proxy.