Nginx 502 문제 조사 - proxynext_upstream

2925 단어 Nginx고가 용
최근 온라인 사용자 가 시도 때 도 없 이 502 로 돌아 갈 것 을 요청 하고 규칙 적 이지 않 습 니 다. 저희 의 배치 구 조 는 Nginx + 웹 응용 입 니 다. nginx 의 upstream 은 두 개의 웹 을 부하 균형 으로 설정 합 니 다.
웹 애플 리 케 이 션 을 분석 한 결과 502 가 나 왔 을 때 요청 이 웹 애플 리 케 이 션 에 도착 하지 않 았 기 때문에 요청 502 가 Nginx 로 직접 되 돌아 온 것 으로 단정 할 수 있 습 니 다. Nginx 의 access. log 를 보면 해당 하 는 요청 정 보 를 찾 을 수 있 고 502 로 되 돌아 간 것 이 확실 합 니 다.
GET /api/app/1 HTTP/1.1" 502 541 17.340 

Nginx error. log 로그 이상:
upstream server temporarily disabled while reading response header from upstream, client..
no live upstreams while connecting to upstream, client..

보 이 는 것 은 upstream server 가 잘못 되 었 기 때 문 입 니 다. 사용 가능 한 웹 애플 리 케 이 션 이 없어 서 이 이상 을 보 았 을 때 첫 번 째 반응 은 두 대의 웹 이 모두 끊 기 는 것 이 어 떻 습 니까??
그러나 웹 의 실행 로그 와 서비스 상태 service xx status 를 보면 502 가 발생 했 을 때 웹 애플 리 케 이 션 의 실행 은 모두 정상 적 이 고 재 부팅 되 거나 지연 되 지 않 았 기 때문에 웹 애플 리 케 이 션 문 제 를 제외 하면 이전에 다른 이상 이 있어 서 이 502 가 발생 한 것 이 아 닙 니까?502 이전 로 그 를 계속 분 석 했 습 니 다. 과연 502 이전에 500 이상 이 있 었 고 이 이상 은 빈도 가 높 았 습 니 다.
"GET /api/project HTTP/1.1" 500 214 0.087 "http://xx.com/" "Mozilla/5.0 (Win
dows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36" "-" "-" xxx.net "10.x.x.x:8081, 10.x.x.x:8081" "500, 500" "0.045, 0.042"

url 분석 을 통 해 알 수 있 듯 이 이것 은 페이지 에 정기 적 인 작업 이 있 기 때문에 10 초 에 한 번 갱신 되 는 것 입 니 다. 이 api 는 bug 가 있어 서 요청 이 500 으로 돌아 갑 니 다. 그런데 500 이 왜 후속 적 인 정상 적 인 요청 을 502 로 만 들 었 는 지 이해 가 되 지 않 습 니 다. 나중에 nginx 의 nginx. conf 를 분석 한 결과 nginx 는 proxy 를 설정 하 였 습 니 다.next_upstream 속성, 이 속성 은 요청 이 뒤의 설정 상태 로 되 돌아 오 는 것 을 발견 하면 다음 upstream 으로 전 송 됩 니 다. 예 를 들 어 500.
location / {
      proxy_pass         http://app-proxy;
      proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
      proxy_next_upstream_tries 3;
      proxy_connect_timeout 60s;
      proxy_read_timeout 60s;
      proxy_send_timeout 60s;
      proxy_pass_request_headers      on;
      proxy_set_header   Host             $host:$server_port;
      proxy_set_header   X-Real-IP        $remote_addr;
      proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
      set $domain default;

결과 테스트 결과, 모든 인 스 턴 스 가 500 으로 돌아 가면 다음 요청 은 502 가 나타 납 니 다. 정상 적 인 api 에 접근 하면 다시 정상 으로 돌아 갑 니 다. nginx 는 upstream 이 500 인 것 을 발견 하면 모든 upstream 을 임시 disable 합 니 다. 즉, 위의 error. log 에 나타 난 'upstream server temporary disabled' 입 니 다. 후속 요청 은 'no live upstreams' 가 있 습 니 다.문 제 는 하지만 502 가 발생 하면 새로운 요청 이 재 검 측 되 고 요청 이 200 이면 정상 으로 돌아온다.
해결: 문제 의 원인 을 찾 으 면 해결 방법 도 간단 합 니 다. 이 500 은 보통 서버 측의 bug 입 니 다. 일반적인 요청 은 500 으로 돌아 가지 않 습 니 다. 문제 가 발생 하면 신속하게 해결 하면 됩 니 다. 또한 이 속성 을 사용 할 때 주의해 야 합 니 다. 만약 에 요청 이 뒤의 매 거 진 상태 라면 nginx 는 다른 upstream 으로 바로 이동 합 니 다.그래서 여러 개의 인 스 턴 스 가 요청 을 받 는 경우 가 있 습 니 다. 어떤 경우 에는 허용 되 지 않 기 때문에 사용 할 때 분석 이 필요 합 니 다.

좋은 웹페이지 즐겨찾기