프록시 패스의 nginx CORS: Cross-Origin 요청이 차단됨: 동일한 원본 정책으로 인해 원격 리소스 읽기가 허용되지 않습니다.

프록시 패스의 nginx CORS: Cross-Origin 요청이 차단됨: 동일한 원본 정책으로 인해 원격 리소스 읽기가 허용되지 않습니다.

이미 실행 중인 애플리케이션에 영향을 주지 않고 API를 하위 도메인에서 다른 도메인으로 이동하려고 합니다. nginx에는 다음과 같은 세 개의 서버가 구성되어 있습니다.

원본 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 '*, *').

그리고 사파리에서는:

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

이에 대한 해결책은 헤더를 복제하거나 set_header를 사용하므로 프록시 통과 서버의 CORS에 add_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;
}
...
}

관련 정보