api.domain.com
으로 들어오는 요청을 localhost:8000
으로 라우팅localhost:8000
으로 표시된다...def build_absolute_uri(request, location, protocol=None):
"""request.build_absolute_uri() helper
Like request.build_absolute_uri, but gracefully handling
the case where request is None.
"""
from .account import app_settings as account_settings
if request is None:
site = Site.objects.get_current()
bits = urlsplit(location)
if not (bits.scheme and bits.netloc):
uri = '{proto}://{domain}{url}'.format(
proto=account_settings.DEFAULT_HTTP_PROTOCOL,
domain=site.domain,
url=location)
else:
uri = location
else:
uri = request.build_absolute_uri(location)
(...)
위 코드는 allauth
패키지의 utils 코드 일부인데, 인증 링크의 도메인 부분을 생성하는 코드이다. 이 함수를 실행할 때 request 객체가 전달된다면 request.build_absolute_uri
를 실행하여 도메인 주소를 얻는데, 이는 request 객체가 가지고 있는 uri 주소를 기반으로 절대 URI를 가져오는 것이다. 참고 - 공식 문서
그런데 앞서 Nginx 서버 라우팅으로 인해 api.domain.com
에서 localhost:8000
으로 호스트 네임이 변경되었다. 즉 request가 가지고 있는 도메인 주소는 localhost:8000
이다.
Nginx의 default.conf 파일에서 api.domain.com
을 라우팅하는 부분에 header를 설정해 주는 부분을 추가해야한다.
proxy_set_header Host $http_host;
를 추가한다.server {
listen 80;
listen [::]:80;
server_name api.domain.com;
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $http_host;
}
}
sudo systemctl restart nginx
커맨드로 Nginx를 다시 실행한다.