TroubleShooting
[Nginx] Proxy API Key 인증키 오류
이슈 상황
- Proxy 용도로 여러 도메인으로 라우팅을 하고 있음
- API Gateway 형태로 인증키 값을 바탕으로 통신 진행
- API Key 인증키 교체 이후 이전 키값으로만 통신이 되는 상황 발생
[비정상동작]
# curl -i -H "X-API-KEY: <New API Key>" https://<Domain>
HTTP/2 500
date: Thu, 30 Nov 2023 06:41:35 GMT
content-type: text/html; charset=utf-8
content-length: 170
server: nginx
<html>
<head><title>500 Internal Server Error</title></head>
<body>
<center><h1>500 Internal Server Error</h1></center>
<hr><center>nginx</center>
</body>
</html>
[정상동작]
# curl -i -H "X-API-KEY: <Old API Key>" https://<Domain>
HTTP/2 200
date: Thu, 30 Nov 2023 06:42:02 GMT
content-type: application/json
server: nginx
Warning: Binary output can mess up your terminal. Use "--output -" to tell
Warning: curl to output it to your terminal anyway, or consider "--output
Warning: <FILE>" to save to a file.
이슈 원인
- /etc/nginx/conf.d 디렉토리 내 도메인 별로 map block 이 각각 정의되어 제각기 다른 API Key 값을 가지고 있기에 발생한 문제
- /etc/nginx/conf.d 디렉토리내 존재하는 모든 도메인들 대상으로 API key 값을 전부 통일 시킨 뒤 이슈 해소
- 추후 /etc/nginx/conf.d 디렉토리 내 map 블록을 정의하는 것이 아닌, /etc/nginx 디렉토리 내 전역적으로 적용될 수 있도록 구조 개선 예정
- Nginx 구조상 Map block 경우 http context 내에 정의되어져야 한다.
[+] https://nginx.org/en/docs/http/ngx_http_map_module.html
다시말해, map block 경우 지역적으로 설정하는 구문에서와(/etc/nginx/conf.d) 동일한 권한 레벨에서 설정이 되어져야 하며 각 도메인 레벨에서 서로 다른 http api 키 값을 설정하는 것은 어렵다. 그렇기에 /etc/nginx/conf.d 디렉토리 내부에 map 블록을 정의하는 것이 아닌 /etc/nginx 에서 별도 api_key.conf 파일을 생성하여 전역적으로 관리가 되어져야 한다.
댓글