본문 바로가기

etc

elastic beanstalk (API 서버token 인증이 안될때)

@마크다운


django로 API를 만들고 API서버를 만들었는데 permission이 먹히지 않는 경우가 발생했다.

로컬에서 다 확인하고 올렸는데 왜 안되나 한참을 고민했는데 도저히 확인할 방법이 없어 온갖 삽질을 다했다.

서버에서 나는 에러는 확실한데 확인할 방법이 마땅치 않아서 한참 절망에 빠져있을때

얼떨결에 나와 비슷한 경우의 글들을 보았다.


[실마리1](https://stackoverflow.com/questions/14877249/django-rest-framework-authenticate-header)

[실마리2](https://stackoverflow.com/questions/9780966/where-do-i-put-wsgipassauthorization-on)


서버에서 AuthorizationHTTP를 사용하기 위해선 WSGIPassAuthorization 옵션이 on으로 있어야 한다는 것이었다.

원인을 알았으니 해결방법은?

WSGIPassAuthorization On으로 바꾸면 된다는데..

저 옵션이 어디에 위치해야하는지 까지는 나와있지 않았다.

[검색어 : WSGIPassAuthorization On](https://stackoverflow.com/questions/9780966/where-do-i-put-wsgipassauthorization-on)


EC2안에 들어가서 /etc/httpd/conf.d 폴더에 wsgi.conf 파일을 수정하라고 한다


> 수정하려면 권한이 없을 것이다 sudo chmod 666 wsgi.conf 라고 하면 읽기와 쓰기가 가능한 권한으로 바뀐다.


```

WSGIScriptAlias밑에다가 적힌대로 따라하자

```


근데 의문점이 갑자기들어 본인은 위의과정을 진행하지 않았다.

서버가 재배포 되었을때 이와 같은 과정을 계속해야 될텐데 너무나도 귀찮지 않은가

그래서 다른 방법을 찾기로 했다.

원인은 알았으니 해결책을 찾는건 의외로 쉬웠다.

[eb공식문서](http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-container.html)


```

packages:

  yum:

    libmemcached-devel: '0.31'


container_commands:

  collectstatic:

    command: "django-admin.py collectstatic --noinput"

  01syncdb:

    command: "django-admin.py syncdb --noinput"

    leader_only: true

  02migrate:

    command: "django-admin.py migrate"

    leader_only: true

  03wsgipass:

    command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf'

  99customize:

    command: "scripts/customize.sh"

```


공식문서를 읽다보면 위와 같은 내용이 나타나는데 

03wsgipass를 주목하자

## 

경로가 약간 미심쩍지만 일단 시키는대로 해보자

## 

ebextensions파일에 wsgipass 커맨드를 그대로 입력하고 실행하니

## 

API가 permission을 제대로 적용하고 있었다.


단 한줄의 코드로 인해 엄청난시간을 잡아먹혀버렸다.


>교훈 : 영어를 잘하면 금방 찾는다.