Nginx trả về 502 trong khi phụ trợ đang khởi động lại. Làm cách nào tôi có thể thực hiện thử lại nginx proxy N lần với độ trễ M giây? Có một plugin hoặc cái gì khác?
Nginx trả về 502 trong khi phụ trợ đang khởi động lại. Làm cách nào tôi có thể thực hiện thử lại nginx proxy N lần với độ trễ M giây? Có một plugin hoặc cái gì khác?
Câu trả lời:
Tôi thấy rằng Nginx mất ~ 2 giây để hoàn thành các nỗ lực nếu bạn chỉ định hàng trăm trường hợp của cùng một phụ trợ:
server localhost:8080 max_fails=0;
server localhost:8080 max_fails=0;
server localhost:8080 max_fails=0;
server localhost:8080 max_fails=0;
(.... er, lặp lại theo yêu cầu!)
Phải, một loại bùn khủng khiếp - nhưng nó có thêm một mức độ ngoan cường ...
Thậm chí tệ hơn thế, bạn có thể sử dụng:
server localhost:8080 max_fails=0;
server localhost:80 backup;
Giả sử Nginx đang chạy trên cổng 80, điều này sẽ cố gắng liên tục lặp yêu cầu xung quanh Nginx cho đến khi localhost: 8080 phản hồi. Tức là thử lại số lần vô hạn (?) Với độ trễ bằng 0 giây.
Tôi sẽ quay trở lại tế bào đệm của tôi bây giờ ....
Nếu cài đặt nginx của bạn có hỗ trợ Lua thì bạn có thể giữ máy khách một thời gian bằng phương pháp ngủ. Các hoạt động là không chặn và không khóa công nhân. Hãy nhớ rằng người dùng không thể bị giữ vô hạn vì một số thời gian chờ tường lửa / ổ cắm liên quan đến mạng khác có thể xảy ra cuối cùng.
server {
listen 8502;
location / {
#25 seconds sleep
content_by_lua_block {
ngx.sleep(25);
ngx.exit(ngx.HTTP_BAD_GATEWAY);
}
}
}
Sau đó, trong danh sách ngược dòng của bạn, bạn cần thêm máy chủ ở trên làm bản sao lưu để giữ máy khách.
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
}
Và điều này nên được bao gồm trong đặc điểm kỹ thuật vị trí của bạn:
proxy_read_timeout 30; #Value must be higher than sleep in Lua
proxy_next_upstream error timeout http_502 http_504;
lua
mô-đun lên nginx trên Ubuntu 17.04 chạy:sudo apt-get install libnginx-mod-http-lua