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.