Nginx 도 메 인 이름 해석 시간 초과
nginx 오류 보고 정 보 는 다음 과 같 습 니 다.
[error] 1828#0: *146807 upstream timed out (110: Connection timed out) while connecting to upstream, client: 106.122.174.199, server: xxx.zhaodao.info, request: "GET / HTTP/1.1", upstream: "http://106.122.xxx.xxx:xxx/", host: "xxx.zhaodao.info"
아 는 문장 한 편 을 찾 았 는데, 분석 이 아주 잘 되 었 으 니, 전재 해 주시 오.
-------------------------------------------------------------------
배경:
이 곳 은 nginx 가 백 엔 드 에 만 대 리 를 하고 백 엔 드 대 리 는 도 메 인 이름 형식의 이러한 상황 을 분석 합 니 다.
1. 정상 적 인 상황 에서 nginx 를 시작 한 후 (또는 - t / reload nginx 시) nginx 는 운영 체제 에서 설정 한 DNS 서버 를 통 해 도 메 인 이름 에 대응 하 는 IP 를 분석 합 니 다.
2. nginx 프로필 에 있 는 모든 도 메 인 이름 이 정상적으로 분 석 된 후에 야 시작 (또는 검사 / 다시 불 러 오기) 할 수 있 습 니 다.
3... / sbin / nginx - t 또는... / sbin / ngins - s reload 는 도 메 인 이름 이 해석 되 는 지 확인 할 뿐 도 메 인 이름 에 대응 하 는 IP 를 캐 시 하지 않 습 니 다. nginx 를 통 해 처음으로 proxypass 백 엔 드 에 대응 하 는 도 메 인 이름 을 프 록 시 데이터 로 전송 할 때 여기 nginx 는 운영 체제 에서 설정 한 DNS 서버 를 통 해 도 메 인 이름 을 분석 합 니 다. 이때 도 메 인 이름 에 대응 하 는 IP 를 캐 시 하고 한 달 동안 캐 시 합 니 다.
내 가 만난 문제:
생산의 실례
1. 우리 내부 네트워크 의 데 이 터 는 nginx 를 통 해 제3자 합작 회사 에 대응 하 는 도 메 인 이름 으로 전송 되 는데 여기 서 도 메 인 이름 A 라 고 부른다.
2. 제3자 회사 의 도 메 인 A 는 CDN 을 만 들 었 고 여러 개의 IP (IP1, IP2, IP3...) 에 대응 하 며 수시로 특정한 이유 로 그 중의 한 IP 를 버 릴 수 있 습 니 다.
3. 어느 날 에 이 제3자 회 사 는 그들의 도 메 인 A 에 대응 하 는 주소 IP3 를 폐기 하고 도 메 인 이름 을 IP3 에 해석 하지 않 습 니 다.
4. 그러나 우리 의 nginx 는 도 메 인 이름 A 를 요청 할 때 IP3 를 캐 시 했 기 때문에 후속 적 인 많은 거래 데 이 터 를 IP3 에 보 내 고 거래 실 패 를 초래 했다. 이런 상황 은 우리 가 reload nginx 가 없 기 전에 2 주 정도 존재 했다. 이 는 nginx 캐 시 라 는 IP3 캐 시 가 오래 되 었 다 는 것 을 의미한다. 이것 이 바로 우리 의 거래 실패 원인 (그 당시 에 여러 날 동안 조사 했다) 이다.나중에 여러 측 이 연락 하여 확인 한 후에 제3자 회사 가 3 주 전에 이 IP3 를 폐기 했다 는 것 을 알 게 되 었 다.
분석 과 해결:
1. nginx 캐 시 도 메 인 이름 이 IP 의 DNS 기록 에 대응 하기 때문에 어떻게 해결 할 수 있 습 니까? 방법 은 두 가지 가 있 습 니 다.
(1) 도 메 인 이름 을 다시 해석 할 수 있 도록 수 동 reload nginx 를 사용 합 니 다. 이 때 도 메 인 이름 에 대응 하 는 IP 가 최신 이 고 폐 기 된 IP3 는 포함 되 지 않 습 니 다.
(2) nginx 의 DNS 캐 시 시간 을 설정 합 니 다. 예 를 들 어 600 s 가 효력 을 잃 은 다음 에 다시 분석 합 니 다.
2. 방법 (2) 이 가장 좋 지만 nginx 의 DNS 캐 시 시간 은 어디 에 설정 되 어 있 습 니까? 찾 지 못 했 습 니 다!
3. 하지만 나 는 다른 방법 인 nginx 의 resolver 를 찾 았 다.
nginx 의 resolver 솔 루 션
1. 기본 nginx 는 운영 체제 에 설 치 된 DNS 서버 (/ etc / resolv. conf) 를 통 해 도 메 인 이름 을 분석 합 니 다.
2. nginx 는 운영 체제 의 DNS 를 찾 지 않 고 자체 적 으로 DNS 서버 를 설정 할 수 있 습 니 다.
3 、 다음은 이 resolver
예제 설정 은 다음 과 같 습 니 다.
server {
listen 8080;
server_name localhost;
resolver 114.114.114.114 223.5.5.5 valid=3600s;
resolver_timeout 3s;
set $qq "www.qq.com";
location / {
proxy_pass http://$qq;
}
}
매개 변수 설명:
\ # resolver 는 http 전역 에서 설정 할 수도 있 고 server 에서 설정 할 수도 있 습 니 다.
\ # resolver 뒤에 DNS 서버 를 지정 합 니 다. 여러 개의 빈 칸 을 지정 할 수 있 습 니 다.
\ # valid DNS 캐 시 실효 시간 설정, 상황 판단 에 따라 600 이상 권장
# resolver_timeout 도 메 인 이름 을 분석 할 때 DNS 서버 의 시간 초과 시간 을 지정 합 니 다. 3 초 정도 권장 합 니 다.
\ # 주의: resolver 뒤에 여러 DNS 서버 가 있 을 때 이 DNS 서버 들 이 모두 유효 하 다 는 것 을 보증 해 야 합 니 다. 이것 은 부하 균형 모드 이기 때문에 DNS 기록 이 효력 을 잃 었 을 때 (valid 시간 초과) 첫 번 째 DNS 서버 (114.114.114.114) 에서 분석 하고 다음 에 계속 효력 을 잃 을 때 두 번 째 DNS 서버 (223.5.5) 에서 분석 하고 직접 테스트 합 니 다.DNS 서버 가 고장 나 면 이번 분석 은 resolver 까지 계 속 됩 니 다.timeout, 그리고 분석 에 실 패 했 습 니 다. 로그 보고 가 잘못 되 어 도 메 인 이름 을 분석 할 수 없습니다. 페이지 를 통 해 502 오 류 를 던 집 니 다.
\ # 중점: 예 를 들 어 백 엔 드 도 메 인 이름 으로 프 록 시 합 니 다.http://www.qq.com시, 절대 proxy 에 직접 쓰 지 마 세 요.pass 에 서 는 server 에 resolver 를 사 용 했 기 때문에 도 메 인 이름 을 변수 에 정의 한 다음 proxypass http: / $변수 이름, 그렇지 않 으 면 nginx 문법 검 측 이 계속 잘못 되 어 도 메 인 이름 을 해석 할 수 없 음 을 알려 줍 니 다.
후기
전체 과정 을 직접 측정 하여 문제 가 없다.
다른 더 좋 은 방법 이나 견해 가 있다 면, 함께 토론 해 보 세 요.
전재 하 다
작성 자: 칠판 링크 지우 기:https://www.zhihu.com/question/61786355/answer/268735267 출처: 저작권 은 작가 의 소유 임 을 알 고 있 습 니 다.상업 전 재 는 작가 에 게 연락 하여 권한 을 수 여 받 으 십시오. 비 상업 전 재 는 출처 를 밝 혀 주 십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
바이너리 파일cat 또는tail, 터미널 디코딩 시 처리 방법cat으로 바이너리 파일을 보려고 할 때 코드가 엉망이 되어 식은땀이 났다. 웹에서 스크롤된 정보의 처리 방법과alias의 설정을 요약합니다. reset 명령을 사용하여 터미널을 재설정합니다.이렇게 하면 고치지 못하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.