
我將 Nginx 設定為在同一伺服器上運行的兩個 docker 容器之間的反向代理負載平衡。第一次載入頁面時,頁面會加載,但所有 css 和 js 檔案都會出現大量 404 錯誤:
刷新或打開第二個選項卡時,所有這些錯誤都會消失並且頁面加載正常。當我將其減少到只提供一個容器時,它同樣工作得很好。
我最初認為這是因為 js 和 css 是從同一根 url 請求的,並且負載平衡器和容器的某些方面會拋出錯誤,因為單一使用者的請求叢集在兩台伺服器之間進行平衡。透過一些實驗,我嘗試使用proxy_set_header Host $host
(看起來這裡和這裡尋求答案) - 我的理解是,這應該將單一使用者的後續請求發送到同一上游伺服器。這似乎使問題很少發生,但並沒有完全消除。
我剩下的問題(來自一個學習業餘愛好者!):
- 這是 的正確使用嗎
proxy_set_header
? 因此是否可以從同一上游伺服器向單一使用者提供 js/css,而不是在兩個伺服器之間對這些相對較小的請求進行負載平衡? - 這是否是問題的可能根源,因為第二個容器必須回應第一個容器載入頁面所提示的一些請求,這些回應在某種程度上沒有排隊?
- 我的用戶群是 100-200 個用戶同時從單一位置存取遠端 URL。我不認為
ip_hash
這樣會起作用,因為所有請求都來自同一個 IP?是否有其他方法可以更有效地將單一使用者綁定到單一伺服器?
我的 nginx 設定檔:
upstream backend {
least_conn;
server localhost:4000;
server localhost:4001;
}
server {
listen 80;
listen [::]:80;
server_name xxxxxxxxxx;
location / {
proxy_pass http://backend;
proxy_redirect http://backend/ $scheme://$host/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 20d;
proxy_buffering off;
}
}