본문 바로가기
Coding/Python

Django+Nginx CORS 문제 해결 방법

by Hide­ 2018. 6. 5.
반응형

기존에 만들어뒀던 학식봇 API를 사용하여 웹으로도 접근 가능하게 만들고 있었다.

React.js를 사용하여 코드를 짜고 있었기 때문에 fetch()를 통해 웹에 접근해야 하는데

당연하게도 CORS(Cross Origin Resource Sharing) 문제가 발생했다.

CORS는 쉽게 말해서 같은 도메인으로만 접근이 가능하도록 하는 Security Policy라고 보면 된다.

그래서 찾아보던 도중 fetch의 인자에 {mode: 'no-cors'} 를 같이 넘겨주면 된다고 나와있어서

테스트해봤는데 뭔가 제대로 오지 않았다. (status도 false로 나옴)

더 찾아보니까 Django에서 설정하면 될 것 같다.

현재 내 API서버는 Django Restframework로 구성되어 있으며 Nginx를 통해 배포되고 있다.

먼저 아래의 명령어로 django-cors-header를 설치한다.


pip install django-cors-headers


그다음 settings.py를 연다.

INSTALLED_APPS에 아래의 라인을 추가해준다.


INSTALLED_APPS = (

    'corsheaders',

)


미들웨어에도 추가해준다.


MIDDLEWARE_CLASSES = (

    'django.middleware.common.CommonMiddleware',

    'corsheaders.middleware.CorsMiddleware',

)


마지막으로 아래 두개의 라인을 추가해준다.


CORS_ALLOW_CREDENTIALS = True

CORS_ORIGIN_ALLOW_ALL = True


그다음 서버를 재시작하고 실행해보면 정상적으로 fetch해오는걸 확인할 수 있다.