nginx 설정 CORS 크로스 필드 구현

2322 단어 nginxcors
장면
최근 에 사진 을 올 리 는 수요 가 있 습 니 다. 분 류 를 위해 인 터 페 이 스 를 다른 도 메 인 이름 으로 배치 하기 때문에 도 메 인 간 문 제 를 해결 해 야 합 니 다.
사고의 방향
처음에는 백 엔 드 코드 에 cors 정책 을 직접 설정 하려 고 했 는데 요청 이 모두 nginx 에서 들 어 왔 기 때문에 cors 를 nginx 로 이동 시 켜 서 이 루어 졌 습 니 다.또한 지정 한 하위 도 메 인 이름 에 만 접근 권한 을 놓 을 수 있 기 때문에 다음 과 같이 설정 합 니 다.
Access-Control-Allow-Origin *.test.com

직접 측정 할 수 없습니다. * 와 지정 한 도 메 인 이름 만 사용 할 수 있 습 니 다.
이루어지다
다행히 nginx 는 if 명령 을 지원 합 니 다. 도 메 인 이름 에 대해 정규 검 사 를 하면 지정 한 하위 도 메 인 이름 크로스 도 메 인 을 실현 할 수 있 습 니 다.다음 테스트 에서 브 라 우 저의 options 가 백 엔 드 에 보 낸 것 을 발견 하고 알 수 없 는 것 을 처리 하지 않 았 습 니 다.좋 습 니 다. nginx 에서 백 엔 드 에 보 내지 않 고 if 명령 으로 http 요청 유형 을 판단 하 십시오.여기에 두 개의 if 를 사 용 했 습 니 다. 가장 구덩이 에 있 는 일이 발생 했 습 니 다. nginx 는 여러 개의 if 명령 에서 어떤 명령 은 마지막 if 가 있어 야 유효 합 니 다. 앞 에 있 는 것 은 덮어 씁 니 다.결국 반복 add헤더 해결.
주의 점
클 라 이언 트 ajax 가 with Credentials 속성 을 true 로 설정 해 야 쿠키 를 보 낼 수 있 습 니 다.또한 쿠키 는 도 메 인 이름 을 업로드 할 때 사용 할 수 있 습 니 다. 그렇지 않 으 면 url 매개 변수 등 을 통 해 전달 해 야 합 니 다.
nginx 설정
location / {
   #       
   if ($http_origin ~ \.test\.com) {
        add_header Access-Control-Allow-Origin $http_origin;
        add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
        add_header Access-Control-Allow-Credentials true;
        add_header Access-Control-Allow-Headers DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type;
        add_header Access-Control-Max-Age 1728000;
   }
   # options       ,    204
   #    if      add_header  ,  nginx   ,         
   if ($request_method = OPTIONS) {
        add_header Access-Control-Allow-Origin $http_origin;
        add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
        add_header Access-Control-Allow-Credentials true;
        add_header Access-Control-Allow-Headers DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type;
        add_header Access-Control-Max-Age 1728000;
        return 204;
   }
    
   #          
   proxy_set_header Host $host;
   proxy_redirect off;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Scheme $scheme;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
   proxy_pass http://xxx.xxx.xxx.xxx;
} 

좋은 웹페이지 즐겨찾기