nginx si l'instruction à l'intérieur de l'emplacement renvoie 404


11

Le bloc suivant

location / {
    if ($http_origin ~* (https?://[^/]*\.example\.com(:[0-9]+)?)) {
        add_header 'Access-Control-Allow-Origin' "$http_origin";
    }
    try_files $uri $uri/ /index.php?$args;
}

… Provoque un 404 car le code ci-dessus n'atteint jamais la try_filesdirective, donc:

  1. Est-ce lié au IfIsEvil de nginx?

  2. Si c'est le cas, existe-t-il un autre moyen de tester le http_originen n'utilisant pas une instruction if?

J'ai essayé cela avec nginx> 1.4 (1.4.6, 1.7, 1.7.8).


1) C'est exactement à partir d'exemples «si c'est mal». 2) Vous pouvez utiliser mapou utiliser en ifdehors de l'emplacement.
Alexey Ten

@AlexeyTen, pourriez-vous fournir un exemple d'utilisation ifà l'extérieur du bloc de localisation?
Eliran Malka

Réponses:


19

J'utiliserais map:

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;
    }
    ...
 }

Que faire si les origines autorisées doivent être différentes pour chaque serveur?
Chris Martin

3
Utilisez plusieurs maps avec différentes variables
Alexey Ten
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.