본문 바로가기
기타

nginx 조건별 header 추가

by 후린트 2022. 12. 13.
반응형

멀티 사이트에서 동일한 스크립트를 호출하기 위해서
access-control-allow 헤더를 추가했다.
https://developer.mozilla.org/ko/docs/Web/HTTP/CORS

하지만 모든 도메인에 대해서 allow하는것이 아니라 특정 도메인에서 접근했을때만 호출하기 위해서
조건을 설정함

server { 
	server_name aaaa.com;
    listen 80;
    
    ...
    ...
    

    set $allow_origin '';
    set $allow_method '';
    # *.abcde.com or *.hoi.com 에서 요청했을경우 
    if ($http_origin ~ "(.*).(abcde|hoi|).com") {
        set $allow_origin $http_origin;
        set $allow_method "GET, POST, PATCH, PUT, DELETE, OPTIONS";
    }

    set $project_path "c:/source/project/";
    location ~ ^/js/(.+) {
        root $project_path;
        try_files /resources/js/$1 =404;

        add_header 'Access-Control-Allow-Origin' "$allow_origin" always;
        add_header 'Access-Control-Allow-Methods'  $allow_method;
    }
    
    ...
    ...
}

*.abcde.com이나 *.hoi.com 에서 aaaa.com의 resource를 요청하게 되면 위에서 설정한 값으로 설정된다.
 - ex) $allow_origin : 요청한 서버가 https://www.abcde.com  이면 https://www.abcde.com 으로 설정된다.

www.abcde.com 에서 /js/test.js 를 호출하게 되면 
location 블록을 통해서 c:/source/project/resources/js/test.js 파일 존재 여부를 확인하고
없을 경우에는 404로 응답하고 존재할 경우에는 header값에 아래 두개의 헤더가 추가된다.
- 'Access-Control-Allow-Origin'
-  'Access-Control-Allow-Methods'

location 블럭 내에서 if문으로 header를 추가하려고 했으나 생각과 다르게 동작하므로
값을 변경하여 설정하는 방법으로 처리함

 

 

반응형