konum içindeki ifade 404 döndürürse nginx


11

Aşağıdaki blok

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

… Yukarıdaki kod hiçbir zaman try_filesdirektiflere ulaşmadığından 404'e neden olur , bu nedenle:

  1. Bu nginx IfIsEvil ile ilgili mi?

  2. Öyleyse, http_originif ifadesini kullanmadan test etmenin başka bir yolu var mı?

Bunu nginx> 1.4 (1.4.6, 1.7, 1.7.8) ile denedim.


1) Tam olarak "kötüyse" örneklerinden alınmıştır. 2) Konum dışında kullanabilir mapveya kullanabilirsiniz if.
Alexey Ten

@AlexeyTen, ifkonum bloğunun dışında nasıl kullanılacağına dair bir örnek verebilir misiniz ?
Eliran Malka

Yanıtlar:


19

Kullanacağım 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;
    }
    ...
 }

İzin verilen kaynakların her sunucu için farklı olması gerekiyorsa ne olur?
Chris Martin

3
mapFarklı değişkenlere sahip birkaç s kullanın
Alexey Ten
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.