NGINX add_header, dodając wiele nagłówków

21

Próbuję wysłać wiele nagłówków

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

Zamiast tego NGINX je przekształca

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

Jakie jest rozwiązanie

Gajus
źródło

Odpowiedzi:

28

Cóż, tak, nginx łączy identycznie nazwane nagłówki .. ale robi to zgodnie ze specyfikacją HTTP. Patrz punkt 4.2 .

Nagłówek:

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

Zgodnie ze specyfikacją HTTP / 1.1 jest funkcjonalnie równoważny z:

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

Jeśli masz system lub aplikację, która jest w stanie odczytać jeden format, a nie drugi, to jest problem. nginx robi to dobrze.


EDYCJA :

Dokumentacja Mozilli stwierdza, że ​​może istnieć tylko jeden Access-Control-Allow-Originnagłówek.

Jego formatowanie ( patrz tutaj ) powinno być rozdzielaną spacjami listą początków:

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

Ale tak naprawdę powinieneśOrigin generować echo nagłówka dostarczonego przez klienta zamiast generować go z niebieskiego. Jest to prawdopodobnie bardziej odpowiednie:

if ($http_origin ~* "^https?://dev\.anuary\.com$" ) {
    add_header Access-Control-Allow-Origin $http_origin;
}
Shane Madden
źródło
Cóż, ten ostatni nie działa w FireFox 9 ani żadnej innej wersji. Co za problem.
Gajus
1
@Guy Nie powinienem. Zobacz edycję.
Shane Madden
UWAGA: Jeśli dane rozwiązanie nie działa dla Ciebie, przeczytaj to i to . Jest pouczający i możesz znaleźć powód, dla którego nie działa.
its_me
Czy wartość Access-Control-Allow-Origin może być wyrażeniem regularnym?
haxpanel
Czy mógłbyś rozszerzyć swój przykład na wiele źródeł (np. http://example.comI http://localhost:3000)?
Augustin Riedinger
-1

Napotkałem ten sam problem, co wiele subdomen w mojej sieci, próbując uzyskać dostęp do zasobów i nginxnie byłem poprawnie skonfigurowany. Oto jak to naprawiłem.

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

Mam nadzieję, że to pomoże.

Milad Rezazadeh
źródło