/ / Nginx: diferencia entre las restricciones de CORS y bloques de servidores específicos - nginx, cors, proxy inverso

Nginx: diferencia entre las restricciones de CORS y bloques de servidores específicos - nginx, cors, proxy inverso

No entiendo muy bien la diferencia entre especificar bloques de servidor específicos (1) frente a establecer restricciones en CORS (2).

es decir, si quiero restringir las llamadas a la API solo a domain1.com y domain2.com, ¿por cuál de ellas debería optar?

(1)

http {
index index.html;

server {
server_name www.domain1.com;
access_log logs/domain1.access.log main;

root /var/www/domain1.com/htdocs;
}
server {
server_name www.domain2.com;
access_log logs/domain2.access.log main;

root /var/www/domain2.com/htdocs;
}
}

(2)

set $cors "";
if ($http_origin ~ "^https?://(localhost|www.domain1.com|www.domain2.com)") {
set $cors "true";
}

if ($cors = "true") {
add_header "Access-Control-Allow-Origin" "$http_origin" always;
...

Respuestas

1 para la respuesta № 1

Soy un principiante con nginx, sin embargo, creo que puedo responder tu pregunta: depende de lo que estés tratando de hacer.

(1) Los bloques del servidor determinan si / cómo la webEl servidor maneja una solicitud basada en el dominio solicitado. P.ej. si el cliente solicita domain1.com, entonces el servidor servirá los recursos de domain1.com; si el cliente solicita domain2.com, entonces el servidor servirá los recursos de domain2.com; etc.

(2) El código CORS, como lo ha mostrado, determinasi el servidor envía o no al navegador un encabezado CORS ("Access-Control-Allow-Origin") en la respuesta (es decir, el encabezado le dice al navegador si debe enviar las solicitudes del cliente solo desde el mismo dominio o no). Estas son instrucciones para que el navegador del cliente implemente restricciones de solicitud de CORS (a mi entender), no son restricciones de CORS implementadas en el lado del servidor.

Entonces, si quieres tener el navegador web del cliente"restringir las llamadas a la api", entonces (2) es su mejor apuesta, mientras que si solo quiere llamadas de la API para un dominio específico para usar un código específico, entonces (1) es su mejor apuesta. Si, como yo, está buscando implementar restricciones CORS en el lado del servidor, entonces ninguna de sus opciones logra eso y debe implementar una solución diferente (pero lo que proporcione con (2) podría ser muy útil si se usa para determinar si o no cómo servir una respuesta en lugar de enviar un encabezado CORS al navegador). HTH.