nginx : 업스트림에 연결하는 동안 라이브 업스트림 없음


15

502 사이트 페이지와 홈 페이지 간 전환시 잘못된 게이트웨이 오류가 표시되지만 홈 페이지의 첫 번째 요청이 아닌 경우 다른 페이지가 해당 페이지로 리디렉션 될 때만 발생합니다. 일부 자바 스크립트 파일에서 발생합니다.

두 개의 업스트림에 구성된로드 밸런싱 php1 php2는 모두 아파치 서버입니다.

오류 로그를 확인하면 다음을 좋아합니다.

no live upstreams while connecting to upstream

[error] 27212#0: *314 no live upstreams while connecting to   upstream, client: ip_address , server: example.com, request: "GET / HTTP/1.1", upstream: "http://example.com", host: "example.com", referrer: "http://example.com/mypages/"

이것은 부하 분산 서버 구성입니다

  upstream example.com  {
    #  ip_hash;
      server php01 max_fails=3 fail_timeout=15s;
      server php02 max_fails=3 fail_timeout=15s;
    }

    server {
      listen IP:80;
      server_name example.com;
      access_log /var/log/nginx/example.com.access;
      error_log /var/log/nginx/example.com.error error;

     location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass  http://$server_name/$uri;
        proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;
        proxy_cache_bypass $http_pragma $http_authorization;
        proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
        proxy_no_cache $http_pragma $http_authorization;
      }

    }

몇 시간 동안 검색했는데 스트림이 작동하고 문제가 없음을 발견했습니다.


업스트림 서버 (php01, php02)가 작동합니까? ngnix 기계에서 그들에게 telnet을 할 수 있습니까?
— neutrinus

그들은 연결되어 있습니다.
— Mohammad Jolani

업스트림 서버에 트래픽을 처리하기에 충분한 프로세스가 실행 중인지 확인 했습니까? 업스트림 서버 로그가 어떤 이유로 요청을 거부하는지 확인해야합니다.
— Tero Kilkanen

업스트림 오류 로그에 문제가 없으며 잘못된 게이트웨이 요청에 대한 액세스 로그가 없습니다.
— Mohammad Jolani

이 문제에 대한 해결책을 찾았습니까?
— flickerfly

답변:


4

이것은 Nginx의 문제가 아니며, PHP 백엔드가 제 시간에 응답하지 않는 문제입니다. Nginx에 로깅을 추가하여이를 확인할 수 있습니다 .

두 번째 참고 자료로 top서버에서 PHP가 CPU 응답 시간을 수동으로 확인할 수 있습니다 .

PHP의 응답 속도가 매우 느리다면 Nginx에게 더 이상 기다렸다가 포기하지 말라고 요청할 수 있습니다.

 # Wait 5 minutes before giving up on the backend!
 proxy_read_timeout 5m; 

위에 링크 된 타이밍 정보를 사용하여 로그를 검사하면 PHP가 처리하기에 느린 요청을 파악할 수 있습니다.

문제를 좁히려면 이러한 요청을 PHP 백엔드로 직접 보내십시오.

진행 상황에 따라 Nginx에서 일부 요청의 캐싱을 활성화하여 일부 느린 요청을 피할 수도 있습니다.


0

그것이 같은지 모르지만 나를 위해 일한 것은 서버 이름 끝에 max_fails = 0을 추가하는 것이 었습니다

업스트림 sm_url {서버 LOAD_BALANCER_DOMAIN_NAME : max_fails = 0; }


-3

업스트림의 이름을 "up_example.com"으로 변경하고 변경

proxy_pass  http://$server_name/$uri;

있다

proxy_pass  http://up_$server_name$uri;

관습 적이 지 않지만의 사용에 대한 기술적 문제는 없습니다 $server_name. 이것이 문제라면, 때때로보고 된 것만이 아니라 그가 / all / 시간에 문제가 있다고 생각합니다.
— Mark Stosberg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.