백엔드가 재시작되는 동안 nginx 프록시 재시도


16

백엔드가 재시작되는 동안 Nginx는 502를 반환합니다. Mgin 지연으로 nginx 프록시 재 시도를 N 번 수행하려면 어떻게해야합니까? 플러그인이나 다른 것이 있습니까?

답변:


5

동일한 백엔드의 수백 인스턴스를 지정한 경우 Nginx에서 시도를 완료하는 데 ~ 2 초가 걸렸습니다.

    server  localhost:8080 max_fails=0;
    server  localhost:8080 max_fails=0;
    server  localhost:8080 max_fails=0;
    server  localhost:8080 max_fails=0;

(.... 어, 필요에 따라 반복하십시오!)

예, 끔찍한 kludge-그것은 다소 강인함을 더합니다 ...

그보다 더 나쁜 것은 다음을 사용할 수 있습니다.

    server  localhost:8080 max_fails=0;     
    server  localhost:80 backup;        

Nginx가 포트 80에서 실행되고 있다고 가정하면 localhost : 8080이 응답 할 때까지 Nginx 주위에서 요청을 계속 반복합니다. 즉, 0 초 지연으로 무한 (?) 횟수를 다시 시도하십시오.

이제 채워진 셀로 돌아가겠습니다 ....


두 번째 접근 방식으로 인해 재귀 루프가 발생하고 서버가 충돌하지 않습니까?
Seun Osewa

@SeunOsewa 백엔드가 응답하는 데 걸리는 시간에 따라 크게 달라 지지만 어느 시점에서 오버플로가 발생합니다.
Oli

2

nginx 설치에 Lua가 지원되는 경우 휴면 방법으로 클라이언트를 잠시 동안 유지할 수 있습니다. 작업이 차단되지 않으며 작업자를 잠그지 않습니다. 다른 네트워크 관련 소켓 / 방화벽 시간 초과가 최종적으로 발생할 수 있으므로 사용자는 무한정 보유 할 수 없습니다.

server {
    listen 8502;
    location / {
        #25 seconds sleep
        content_by_lua_block {
             ngx.sleep(25); 
             ngx.exit(ngx.HTTP_BAD_GATEWAY);
        }
    }
}

그런 다음 업스트림 목록에서 클라이언트를 보유하기 위해 위의 서버를 백업으로 추가해야합니다.

upstream backend {
    server 127.0.0.1:3001 fail_timeout=2s; #The backend
    server 127.0.0.1:8502 backup; #Lua holding server in the event backend is restarting
}

그리고 이것은 프록시 위치 지정 사양에 포함되어야합니다.

proxy_read_timeout         30;  #Value must be higher than sleep in Lua
proxy_next_upstream error timeout http_502 http_504;

lua우분투 17.04에서 nginx에 모듈 을 설치하려면 다음을 실행하십시오.sudo apt-get install libnginx-mod-http-lua
Eugene Mala

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.