プロキシパス上の nginx CORS: クロスオリジンリクエストがブロックされました: 同一オリジンポリシーによりリモートリソースの読み取りが禁止されています

プロキシパス上の nginx CORS: クロスオリジンリクエストがブロックされました: 同一オリジンポリシーによりリモートリソースの読み取りが禁止されています

すでに実行中のアプリケーションに影響を与えずに、API をサブドメインから別のサブドメインに移動しています。nginx には次のような 3 つのサーバーが設定されています。

オリジナル API サーバー:

server {
listen       80;
server_name  example.com;

root  /var/www/example/;

index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args;

add_header 'Access-Control-Allow-Origin' '*';

location / {
   try_files $uri $uri/ /index.php?$args;
}

 location ~*/api/([a-zA-Z0-9_]+) {
    proxy_pass      http://127.0.0.1:4343/api/$1;
    proxy_read_timeout 60s;

    proxy_set_header          Host            $host;
    proxy_set_header          X-Real-IP       $remote_addr;
    proxy_set_header          X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header 'Access-Control-Allow-Origin' '*';
    proxy_set_header 'Access-Control-Allow-Credentials' true;
 }
...
}

プロキシ通過サーバー:

server {
listen 4343;
server_name _;

root  /var/www/exampleapi/;

index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args;

add_header 'Access-Control-Allow-Origin' '*';

location / {
   try_files $uri $uri/ /index.php?$args;
}
...
}

AJAX 呼び出しは古い API では完璧に機能していましたが、新しい API では FF でエラーが発生します。

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://example.com/api/startup. (Reason: CORS header 'Access-Control-Allow-Origin' does not match '*, *').

Safari では:

XMLHttpRequest cannot load https://example.com/api/startup. Origin https://myclient.com is not allowed by Access-Control-Allow-Origin.

新しい API と古い API の両方でのカーリングは次のようになります。

HTTP/1.1 200 OK
Access-Control-Allow-Origin: *

この問題をどうすれば解決できるでしょうか?

答え1

これを解決するには、プロキシ通過サーバーのCORSにadd_headerを追加しないか、set_headerを使用するかです。

プロキシ通過サーバー:

server {
listen 4343;
server_name _;

root  /var/www/exampleapi/;

index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args;

location / {
   try_files $uri $uri/ /index.php?$args;
}
...
}

関連情報