nginx se l'istruzione all'interno della posizione restituisce 404


11

Il seguente blocco

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

... causa un 404 poiché il codice sopra non raggiunge mai la try_filesdirettiva, quindi:

  1. È correlato a IfIsEvil di nginx?

  2. Se lo è, allora c'è un altro modo per testare il http_originnon usando un'istruzione if?

Ho provato questo con nginx> 1.4 (1.4.6, 1.7, 1.7.8).


1) È esattamente dagli esempi "if is evil". 2) È possibile utilizzare mapo utilizzare ifal di fuori della posizione.
Alexey Ten,

@AlexeyTen, potresti fornire un esempio su come utilizzare ifal di fuori del blocco posizione?
Eliran Malka,

Risposte:


19

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

Cosa succede se le origini consentite devono essere diverse per ciascun server?
Chris Martin,

3
Usa diverse maps con variabili diverse
Alexey Ten
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.