Je recherche une configuration de configuration nginx qui configure la Access-Control-Allow-Origin
à la valeur reçue dans le Origin
.
Il semble que le *
la méthode ne fonctionne pas avec Chrome et les URL multiples ne fonctionnent pas avec Firefox car elles ne sont pas autorisées par la spécification CORS.
Jusqu'à présent, la seule solution est de configurer le Access-Control-Allow-Origin
à la valeur reçue dans l'Origine (oui une validation pourrait être implémentée).
La question est de savoir comment faire cela dans nginx, de préférence sans installer d'extensions supplémentaires.
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;
L'utilisation de if
peut parfois interrompre d'autres configurations telles que try_files
. Vous pouvez vous retrouver avec des 404 inattendus.
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;
}
...
}
Je commence à l'utiliser moi-même, et voici la ligne dans ma configuration Nginx actuelle:
add_header 'Access-Control-Allow-Origin' "$http_Origin";
Cela définit un en-tête pour autoriser l'origine de la demande comme seule origine autorisée. Donc, d'où que vous veniez, c'est le seul endroit autorisé. Il ne devrait donc pas être très différent de permettre "*", mais il semble plus spécifique du point de vue du navigateur.
De plus, vous pouvez utiliser la logique conditionnelle dans votre configuration Nginx pour spécifier une liste blanche de noms d'hôtes à autoriser. Voici un exemple de https://Gist.github.com/Ry4an/6195025
if ($http_Origin ~* (whitelist\.address\.one|whitelist\.address\.two)$) {
add_header Access-Control-Allow-Origin "$http_Origin";
}
J'ai l'intention d'essayer cette technique sur mon propre serveur pour mettre en liste blanche les domaines autorisés.