nginx if-Anweisung innerhalb des Speicherorts gibt 404 zurück


11

Der folgende Block

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

… Verursacht einen 404, da der obige Code niemals die try_filesDirektive erreicht, also:

  1. Hat dies etwas mit dem IfIsEvil von Nginx zu tun ?

  2. Wenn ja, gibt es dann eine andere Möglichkeit, dies zu testen, http_originindem Sie keine if-Anweisung verwenden?

Ich habe dies mit nginx> 1.4 (1.4.6, 1.7, 1.7.8) versucht.


1) Es ist genau aus "wenn es böse ist" Beispiele. 2) Sie können außerhalb des Standorts verwenden mapoder verwenden if.
Alexey Ten

@AlexeyTen, können Sie ein Beispiel für die Verwendung ifaußerhalb des Standortblocks angeben ?
Eliran Malka

Antworten:


19

Ich würde verwenden 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;
    }
    ...
 }

Was ist, wenn die zulässigen Ursprünge für jeden Server unterschiedlich sein müssen?
Chris Martin

3
Verwenden Sie mehrere maps mit unterschiedlichen Variablen
Alexey Ten
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.