404 응답을 위해 Nginx에서 교차 출처 요청 (CORS) 허용


26

이 질문에 설명 된 기술을 사용하여 CORS 요청에 대한 응답으로 정적 파일을 제공하기 위해 Nginx를 사용하고 있습니다. 그러나 파일이 존재하지 않으면 404 응답에 Access-Control-Allow-Origin: *헤더 가 포함되지 않으므로 브라우저에 의해 차단됩니다.

Access-Control-Allow-Origin: *404 응답을 보내려면 어떻게 해야합니까?

답변:


35

이것은 오래 전에 요청되었지만 더 많은 모듈로 nginx를 컴파일하고 있지만 최신 버전의 nginx로 nginx를 사용자 정의 컴파일 할 필요가 없다는 것을 알았습니다. 필요한 것은 always지시문 을 추가하는 것 입니다.

http://nginx.org/en/docs/http/ngx_http_headers_module.html

Syntax: add_header name value [always];

always 매개 변수가 지정되면 (1.7.5) 응답 코드에 관계없이 헤더 필드가 추가됩니다.

따라서 조정 된 CORS 헤더 버전은 다음과 같습니다.

            if ($cors = "trueget") {
                    # Tells the browser this origin may make cross-origin requests
                    # (Here, we echo the requesting origin, which matched the whitelist.)
                    add_header 'Access-Control-Allow-Origin' "$http_origin" always;

                    # Tells the browser it may show the response, when XmlHttpRequest.withCredentials=true.
                    add_header 'Access-Control-Allow-Credentials' 'true' always;
            }

2
always열쇠였습니다. 이것을 지적 해 주셔서 감사합니다. 나는 화를 냈습니다!
bgondy

11

현재 add_header지시어를 사용하고 있다고 가정합니다 . 설명서에 따르면 200, 204, 301, 302 및 304 상태 코드의 헤더 만 설정됩니다. 404 상태 코드에 대한 헤더를 설정하려면 headers_more 모듈 의 more_set_headers지시문 을 사용해야합니다 (이 모듈을 얻으려면 nginx를 다시 컴파일해야 할 수도 있음). 다음은 모든 상태 코드의 헤더를 설정합니다.

more_set_headers 'Access-Control-Allow-Origin: *';

특정 상태 코드로 제한 할 수도 있습니다.

more_set_headers -s '404' 'Access-Control-Allow-Origin: *';
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.