TroubleShooting

[Nginx] Proxy API Key 인증키 오류

[앙금빵] 2023. 12. 1.

이슈 상황

  • 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
 

Module ngx_http_map_module

Module ngx_http_map_module The ngx_http_map_module module creates variables whose values depend on values of other variables. Example Configuration map $http_host $name { hostnames; default 0; example.com 1; *.example.com 1; example.org 2; *.example.org 2;

nginx.org

 

다시말해, map block 경우 지역적으로 설정하는 구문에서와(/etc/nginx/conf.d) 동일한 권한 레벨에서 설정이 되어져야 하며 각 도메인 레벨에서 서로 다른 http api 키 값을 설정하는 것은 어렵다. 그렇기에 /etc/nginx/conf.d 디렉토리 내부에 map 블록을 정의하는 것이 아닌 /etc/nginx 에서 별도 api_key.conf 파일을 생성하여 전역적으로 관리가 되어져야 한다.

 

댓글