Tôi đã thiết lập Nginx làm cân bằng tải proxy ngược giữa hai vùng chứa docker chạy trên cùng một máy chủ. Khi tải trang lần đầu tiên, trang sẽ tải nhưng tôi gặp rất nhiều lỗi 404 cho tất cả các tệp css và js:
Khi làm mới hoặc mở tab thứ hai, tất cả các lỗi này sẽ biến mất và trang tải tốt. Khi tôi giảm điều này xuống chỉ phục vụ một vùng chứa, nó cũng hoạt động tốt.
Ban đầu, tôi đã nghĩ điều này là do js và css được yêu cầu từ cùng một url gốc và một số khía cạnh của bộ cân bằng tải và bộ chứa đã đưa ra lỗi do một cụm yêu cầu cho một người dùng được cân bằng giữa hai máy chủ. Thông qua một chút thử nghiệm, tôi đã thử sử dụng proxy_set_header Máy chủ lưu trữ $host
(đang nhìn đây và đây để biết câu trả lời) - tôi hiểu rằng điều này sẽ gửi các yêu cầu tiếp theo của một người dùng đến cùng một máy chủ ngược dòng. Điều này dường như làm cho sự cố hiếm khi xảy ra hơn nhưng vẫn chưa loại bỏ được hoàn toàn.
Các câu hỏi còn lại của tôi (từ một người học nghiệp dư!):
- Đây có phải là cách sử dụng đúng
proxy_set_header
và do đó có thể phân phối js/css từ cùng một máy chủ ngược dòng cho một người dùng, thay vì cân bằng tải các yêu cầu tương đối nhỏ này trên hai máy chủ không?
- Đây có phải là gốc rễ của vấn đề không, với vùng chứa thứ hai phải đáp ứng một số yêu cầu được nhắc bằng cách tải trang cho vùng chứa đầu tiên, các phản hồi này bằng cách nào đó không xếp hàng?
- Cơ sở người dùng của tôi sẽ có 100-200 người dùng đồng thời truy cập vào một url từ xa từ một vị trí. tôi không nghĩ
ip_hash
sau đó sẽ hoạt động vì tất cả các yêu cầu sẽ đến từ cùng một IP? Có cách nào khác để buộc một người dùng vào một máy chủ hiệu quả hơn không?
Tệp cấu hình nginx của tôi:
phụ trợ ngược dòng {
less_conn;
máy chủ cục bộ: 4000;
máy chủ cục bộ: 4001;
}
người phục vụ {
nghe 80;
nghe [::]:80;
tên máy chủ xxxxxxxxxx;
địa điểm / {
proxy_pass http://phụ trợ;
proxy_redirect http://backend/ $scheme://$host/;
proxy_http_version 1.1;
proxy_set_header Nâng cấp $http_upgrade;
proxy_set_header Máy chủ lưu trữ $host;
proxy_set_header Kết nối $connection_upgrade;
proxy_read_timeout 20d;
tắt proxy_buffering;
}
}