Comment autoriser l’access aux fichiers SVG via CORS vers plusieurs domaines au sein de nginx

J’avais des problèmes pour charger les SVG sur mon site Web si vous consultiez website.com au lieu de www.website.com. Le site Web est sur un serveur nginx, alors j’ai ajouté ceci, et cela a résolu le problème:

location / { add_header Access-Control-Allow-Origin "*"; } 

Cependant, basé sur ce que j’ai lu, il semble que cela cause un problème de sécurité? Est-il possible de ne spécifier que www.website.com et website.com au lieu de *? Je demande parce que je suis tombé sur cela en PHP et il semble que ce dont j’ai besoin, mais pour nginx:

 header('Access-Control-Allow-Origin: http://www.website.com'); header('Access-Control-Allow-Origin: http://website.com'); 

La spécification W3 sur Access-Control-Allow-Origin explique que plusieurs origines peuvent être spécifiées par une liste séparée par des espaces. En pratique, cependant, il est peu probable que cela soit interprété correctement par les implémentations actuelles dans les navigateurs (par exemple, échec pour Firefox 45 au moment de la rédaction); résumé par ce commentaire .

Pour implémenter ce dont vous avez besoin, l’extrait de code nginx suivant vérifie l’en-tête Origin entrant et ajuste la réponse en conséquence:

 location / { if ($http_origin ~* "^https?://(website.com|www.website.com)$") { add_header Access-Control-Allow-Origin "$http_origin"; } } 

Ajoutez plus de domaines dans l’expression régulière si nécessaire; le s? peut être supprimé si vous souhaitez uniquement prendre en charge http:// .

Pour noter, si vous incluez des fichiers SVG directement sur une page Web via HTML (par exemple,

et votre réponse contiendra:

 Header-Name: value Header-Name: value2 

add_header peut également comporter des variables et noter que vous souhaiterez peut-être append le paramètre always (voir http://nginx.org/en/docs/http/ngx_http_headers_module.html#add_header ) si vous souhaitez append des en-têtes à tous les codes de réponse, y compris les erreurs.