nginx sub 도메인에서 main 도메인으로 접근할때 aa.aaa.com -> aaa.com CORS 해결법
페이지 정보
작성자
DocsArchives
작성일
2025.09.07 20:24
본문
1. 기본 CORS 원리
브라우저는 출발 도메인(aa.aaa.com)과 응답 도메인(aaa.com)이 다르다고 판단 → CORS 헤더 필요.
즉, aaa.com 서버에서 Access-Control-Allow-Origin 등을 내려줘야 함.
2. nginx 설정 예시
(1) 단일 서브도메인 허용
server { listen 443 ssl; server_name aaa.com;
location / { # 실제 서비스 처리 proxy_pass http://backend;
# CORS 허용 헤더 add_header 'Access-Control-Allow-Origin' 'https://aa.aaa.com' always; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE' always; add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type' always; add_header 'Access-Control-Allow-Credentials' 'true' always;
# Preflight (OPTIONS) 요청 처리 if ($request_method = OPTIONS) { add_header 'Access-Control-Allow-Origin' 'https://aa.aaa.com' always; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE' always; add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type' always; add_header 'Access-Control-Allow-Credentials' 'true' always; return 204; } }}(2) 모든 서브도메인 허용 (정규식 매칭)
nginx는
그래서 보통
Access-Control-Allow-Origin에 와일드카드(*)를 쓰면 credentials(쿠키, 세션) 허용이 불가능해요.그래서 보통
Origin 헤더를 읽어서 동적으로 반영합니다.map $http_origin $cors_origin { default ""; "~^https?://([a-z0-9-]+).aaa.com$" $http_origin;}
server { listen 443 ssl; server_name aaa.com;
location / { proxy_pass http://backend;
if ($cors_origin != "") { add_header 'Access-Control-Allow-Origin' $cors_origin always; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE' always; add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type' always; add_header 'Access-Control-Allow-Credentials' 'true' always; }
if ($request_method = OPTIONS) { return 204; } }}3. 체크리스트
-
프론트엔드 요청 코드:
fetch나axios요청 시credentials: 'include'필요 여부 확인. -
SSL: 반드시 HTTPS 환경에서 테스트 (특히 크롬).
-
OPTIONS 요청이 제대로 처리되는지 확인 (nginx에서 빠뜨리면 405 에러).
태그
댓글 0