나 같은 경우 Nginx와 AWS ELB를 사용할 때
간헐적으로 Nginx 서비스가 안 되는 경우를 경험했다.
그 이유와 해결 방법에 대해서 포스팅을 진행해 봤다.
- Dynamic DNS resolution란?
DNS의 IP가 변경되었을때 자동적으로 IP를 변경해주는 기능을 Dynamic DNS Resolution라고 함
유료 솔루션인 Nginx Plus의 경우는 Dynamic DNS Resolution 기능이 제공되지만
무료 솔루션인 Nginx Open은 기능이 제공되지 않음(하지만 해당 기능을 사용하는 방법은 존재)
- Nginx와 ELB 사용 시 오류가 발생하는 이유
Nginx는 기동될때 ELB의 ip를 가져와 캐시에 로드함
AWS ELB인 경우 ip가 동적으로 변경됨
ELB의 ip가 변경되는 경우 Nginx는 계속 예전 ip 주소를 기반으로 서비스를 하기 때문에
오류가 발생한다.
- 임시조치방법
이런 경우 임시조치지만 Nginx를 reload하면 다시 ip주소를 가져와 정상적으로 서비스가 된다.
하지만 해당 문제가 간헐적으로 발생하기 때문에 비효율적인 방법이다.
- 해결방법
도메인 변수 처리와 rewrite 설정을 섞으면 가능하다.
proxy_pass는 변수로 지정해야한다.
변수로 지정하지 않으면 한 번만 해결하며 그 이후에는 같은 증상 발생한다.
또, 새로운 ip를 resolver 하기 전에 서버로 호출한다고 한다.
config 예제
upstream server {
server {ELB_Name}:443;
keepalive 1024;
}
server {
listen 80;
set $host "https://hostname";
resolver {/etc/resolv.conf 경로에 있는 IP} valid=30s;
location /{
proxy_pass $host;
}
}
다만 Nginx Open에서 정식으로 제공하는 기능은 아니기 때문에
혹시나 나중에 버전이 변경되면 사용할 수 없을 수도 있으니 주의하시길 바란다.
'Nginx' 카테고리의 다른 글
nginx header log (custom header 사용) (0) | 2023.12.11 |
---|---|
nginx log 경로 변경 후 오류 (13: Permission denied) while logging request (0) | 2023.07.11 |
Nginx 오류 a duplicate default server for 0.0.0.0:80 (0) | 2023.07.10 |
Nginx restrict access by ip 사용자 ip로 제한하기-2(추가작업) (0) | 2023.06.27 |
Nginx restrict access by ip 사용자 ip로 제한하기 (0) | 2023.06.26 |