proxy_set_header origin missing control check allow add_header javascript nginx cors

javascript - origin - nginx cors proxypass



¿Cómo configurar correctamente nginx Access-Control-Allow-Origin en el encabezado de respuesta en función del encabezado de origen de la solicitud? (2)

Estoy empezando a usar esto yo mismo, y esta es la línea en mi configuración actual de Nginx:

add_header ''Access-Control-Allow-Origin'' "$http_origin";

Esto establece un encabezado para permitir el origen de la solicitud como el único origen permitido. Así que de donde vienes es el único lugar permitido. Así que no debería ser muy diferente a permitir "*", pero parece más específico desde la perspectiva del navegador.

Además, puede usar la lógica condicional en su configuración de Nginx para especificar una lista blanca de nombres de host para permitir. Aquí hay un ejemplo de https://gist.github.com/Ry4an/6195025

if ($http_origin ~* (whitelist/.address/.one|whitelist/.address/.two)$) { add_header Access-Control-Allow-Origin "$http_origin"; }

Planeo probar esta técnica en mi propio servidor para agregar a la lista blanca los dominios permitidos.

Estoy buscando una configuración de configuración nginx que configure el Access-Control-Allow-Origin al valor recibido en el Origin .

Parece que el método * no funciona con Chrome y las múltiples URL no funcionan con Firefox, ya que no está permitido por la especificación CORS.

Hasta ahora, la única solución es configurar Access-Control-Allow-Origin al valor recibido en el origen (sí, se podría implementar alguna validación).

La pregunta es cómo hacer esto en nginx, preferiblemente sin instalar extensiones adicionales.

set $allow_origin "https://example.com" # instead I want to get the value from Origin request header add_header ''Access-Control-Allow-Origin'' $allow_origin;


Usando if veces puede romper otras configuraciones como try_files . Puedes terminar con 404s inesperados.

Usar mapa en su lugar

map $http_origin $cors_header { default ""; "~^https?://[^/]+/.example/.com(:[0-9]+)?$" "$http_origin"; } server { ... location / { add_header Access-Control-Allow-Origin $cors_header; try_files $uri $uri/ /index.php; } ... }

Si es malvado