ロケーション内のステートメントが404を返す場合のnginx


11

次のブロック

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

…上記のコードがtry_filesディレクティブに到達しないため、404が発生します。

  1. これはnginx のIfIsEvilに関連していますか?

  2. そうでhttp_originある場合、ifステートメントを使用しないでテストする他の方法はありますか?

私はこれをnginx> 1.4(1.4.6、1.7、1.7.8)で試しました。


1)それはまさに「if is evil」の例です。2)場所以外で使用mapまたは使用できますif
アレクセイ10年

@AlexeyTen、ifロケーションブロックの外で使用する方法の例を提供できますか?
エリランマルカ

回答:


19

私は使用します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;
    }
    ...
 }

許可されたオリジンがサーバーごとに異なる必要がある場合はどうなりますか?
クリスマーティン

3
map異なる変数でいくつかのsを使用してください
アレクセイ10
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.