Định cấu hình nginx để thử lại một máy chủ ngược dòng


14

Tôi đang sử dụng nginx làm proxy ngược và tôi muốn nó chờ vài giây và thử lại yêu cầu nếu máy chủ ngược dòng không phản hồi. Bằng cách này, tôi có thể khởi động lại máy chủ ngược dòng của mình và thay vì người dùng thấy 502 cổng xấu, trình duyệt của họ chỉ bị treo trong vài giây (quá trình khởi động lại mất 3 hoặc 4 giây). Tôi đã thử một vài thứ, tôi đặt cái này vào khối máy chủ của mình:

proxy_connect_timeout 60;
proxy_send_timeout 15;
proxy_read_timeout 20;

nhưng nó dường như không làm gì cả Tôi cũng đã thử thêm phần này vào khối ngược dòng:

server 127.0.0.1:3001 fail_timeout=10s;

một lần nữa, không phải những gì tôi muốn.

Điều này có thể không? Tôi đang thiếu gì?

Câu trả lời:


1

Các chỉ thị bạn đã thử có nghĩa là cho những thứ khác nhau hơn những gì bạn muốn. Đọc tài liệu của họ.

Các upstreamtài liệu chỉ thị giải thích triệt để cách một khối thượng nguồn hoạt động:

Nếu xảy ra lỗi trong quá trình giao tiếp với máy chủ, yêu cầu sẽ được chuyển đến máy chủ tiếp theo, và cứ thế cho đến khi tất cả các máy chủ hoạt động sẽ được thử. Nếu không thể nhận được phản hồi thành công từ bất kỳ máy chủ nào, máy khách sẽ nhận được kết quả liên lạc với máy chủ cuối cùng.

Tất cả mọi thứ nói ở đó.

Tuy nhiên, bạn có thể xử lý mã lỗi được trả về từ phụ trợ bằng cách chặn nó proxy_intercept_errorsvà sau đó gửi $request_uritập lệnh đặc biệt xử lý nó thay mặt cho máy khách ban đầu.

Đường cơ sở là: bạn cần một số logic mã / ứng dụng để thử lại phía máy khách (hoặc phía trước).


0

Như đã nêu trong một câu trả lời khác, không có cách tích hợp nào để khiến nginx làm điều này. Một giải pháp khả thi là sử dụng thiết lập cân bằng tải bao gồm máy chủ hiện tại của bạn và máy chủ dự phòng thực hiện các thao tác sau cho tất cả các yêu cầu:

  • thăm dò máy chủ hiện tại của bạn cho đến khi nó trở lại trực tuyến
  • sau đó trả lời bằng chuyển hướng 302 hoặc khác để trình duyệt thử lại

Máy chủ này sẽ được đánh dấu bằng cờ 'sao lưu' để nó chỉ được thử khi tất cả các máy chủ khác ngoại tuyến ( Cân bằng tải HTTP> Trọng lượng máy chủ ).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.