NGINX add_header、複数のヘッダーを追加


21

複数のヘッダーを送信しようとしています

add_header Access-Control-Allow-Origin http://dev.anuary.com;
add_header Access-Control-Allow-Origin https://dev.anuary.com;

ただし、代わりにNGINXはそれらを

Access-Control-Allow-Origin: http://dev.anuary.com, https://dev.anuary.com

解決策は何ですか?

回答:


28

ええ、はい、nginxは同じ名前のヘッダーを結合していますが、HTTP仕様に従って結合しています。 セクション4.2を参照してください

ヘッダー:

Access-Control-Allow-Origin: http://dev.anuary.com, https://dev.anuary.com

HTTP / 1.1仕様によれば、機能的には次と同等です。

Access-Control-Allow-Origin: http://dev.anuary.com
Access-Control-Allow-Origin: https://dev.anuary.com

あるフォーマットを読み取ることができ、他のフォーマットを読み取れないシステムまたはアプリケーションがある場合、それは問題です。nginxはそれを正しく行っています。


編集

Mozillaのドキュメントは 1つのしかできることを述べてAccess-Control-Allow-Originヘッダー。

そのフォーマット(ここを参照)は、スペースで区切られた起源のリストである必要があります。

add_header Access-Control-Allow-Origin "http://dev.anuary.com https://dev.anuary.com";

ただし、実際には、青色のヘッダーを生成するのではなく、クライアントから提供されたヘッダーをエコーすることになっていますOrigin。これはおそらくより適切です:

if ($http_origin ~* "^https?://dev\.anuary\.com$" ) {
    add_header Access-Control-Allow-Origin $http_origin;
}

まあ、後者はFireFox 9やその他のバージョンでは動作しません。どの問題。
ガジュス

1
@Guyそれもすべきではありません。編集を参照してください。
シェーンマッデン

注:指定された解決策が機能しない場合は、こちらこちらをお読みください。それは啓発的であり、それが機能していない理由を見つけるかもしれません。
its_me

Access-Control-Allow-Originの値は正規表現にできますか?
haxpanel

あなたの例を複数の起源(例えばhttp://example.com、そしてhttp://localhost:3000)に拡張してくれませんか?
オーガスティンリーディンガー


-1

ネットワーク内の複数のサブドメインがリソースにアクセスしようとしていたのと同じ問題に直面していましたが、nginx正しく設定されていませんでした。修正方法は次のとおりです。

add_header Access-Control-Allow-Origin https://*.your-domain-name.com;

これがお役に立てば幸いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.