NGINX add_header, agregando múltiples encabezados

21

Estoy tratando de enviar múltiples encabezados

add_header Access-Control-Allow-Origin http://dev.anuary.com;
add_header Access-Control-Allow-Origin https://dev.anuary.com;

Sin embargo, en cambio, NGINX los convierte en

Access-Control-Allow-Origin: http://dev.anuary.com, https://dev.anuary.com

¿Cual es la solución?

Gajus
fuente

Respuestas:

28

Bueno, sí, nginx combina los encabezados con nombres idénticos ... pero lo hace de acuerdo con la especificación HTTP. Ver sección 4.2 .

El encabezado:

Access-Control-Allow-Origin: http://dev.anuary.com, https://dev.anuary.com

Es, de acuerdo con la especificación HTTP / 1.1, funcionalmente equivalente a:

Access-Control-Allow-Origin: http://dev.anuary.com
Access-Control-Allow-Origin: https://dev.anuary.com

Si tiene un sistema o aplicación que es capaz de leer un formato y no el otro, entonces ese es el problema. nginx lo está haciendo bien.


EDITAR :

La documentación de Mozilla establece que solo puede haber un Access-Control-Allow-Originencabezado.

El formato de la misma ( ver aquí ) debe ser una lista de orígenes delimitados por espacios:

add_header Access-Control-Allow-Origin "http://dev.anuary.com https://dev.anuary.com";

Pero realmente, se supone que debes hacer eco del Originencabezado proporcionado por el cliente en lugar de generar uno de la nada. Esto es probablemente más apropiado:

if ($http_origin ~* "^https?://dev\.anuary\.com$" ) {
    add_header Access-Control-Allow-Origin $http_origin;
}
Shane Madden
fuente
Bueno, este último no funciona en FireFox 9 ni en ninguna otra versión. Que problema.
Gajus
1
@Guy Tampoco debería. Ver editar.
Shane Madden
NOTA: Si la solución dada no funciona para usted, lea esto y esto . Es esclarecedor, y puede encontrar la razón por la que no está funcionando.
its_me
¿Puede el valor de Access-Control-Allow-Origin ser regexp?
haxpanel
¿Le importaría extender su ejemplo a múltiples orígenes (p. Ej. http://example.comY http://localhost:3000)?
Augustin Riedinger
-1

Estaba enfrentando el mismo problema que varios subdominios en mi red tratando de acceder a los recursos y nginxno estaba configurado correctamente. Así es como lo arreglé.

add_header Access-Control-Allow-Origin https://*.your-domain-name.com;

Espero que esto ayude.

Milad Rezazadeh
fuente