Повторіть спробу nginx проксі під час перезавантаження


16

Nginx повертає 502 під час перезавантаження. Як я можу зробити nginx проксі повторити N разів із затримкою в M секунд? Чи є плагін чи щось інше?

Відповіді:


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;

(.... е, повторіть, як потрібно!)

Так, жахливий хитрощі - але це додає певної стійкості ...

Навіть гірше за це ви можете використовувати:

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

Якщо припустити, що Nginx працює на порту 80, це намагатиметься постійно цикла запит навколо Nginx, поки localhost: 8080 не відповість. Тобто повторіть нескінченну (?) Кількість разів із нульовою секундою затримки.

Я зараз повернуся до своєї підкладеної камери….


Чи не призведе другий підхід до рекурсивного циклу та збій сервера?
Seun Osewa

@SeunOsewa Це багато в чому залежить від того, скільки часу потрібно, щоб бекенд відповів, але так, це в певний момент переповниться.
Олі

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модуль до nginx на ubuntu 17.04, запустіть:sudo apt-get install libnginx-mod-http-lua
Євген Мала

1

Найбільш близьким, що я знаю, є цей проект , але я його ніколи не використовував. Я знаю, що лак має перевірку, можливо, ви хочете його поглянути.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.