Nginx повертає 502 під час перезавантаження. Як я можу зробити nginx проксі повторити N разів із затримкою в M секунд? Чи є плагін чи щось інше?
Nginx повертає 502 під час перезавантаження. Як я можу зробити nginx проксі повторити N разів із затримкою в M секунд? Чи є плагін чи щось інше?
Відповіді:
Я виявив, що 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 не відповість. Тобто повторіть нескінченну (?) Кількість разів із нульовою секундою затримки.
Я зараз повернуся до своєї підкладеної камери….
Якщо у вашій установці 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
Найбільш близьким, що я знаю, є цей проект , але я його ніколи не використовував. Я знаю, що лак має перевірку, можливо, ви хочете його поглянути.