當 docker 容器之間進行負載平衡時,Nginx 並不總是提供 js 和 css - 適用於刷新

當 docker 容器之間進行負載平衡時,Nginx 並不總是提供 js 和 css - 適用於刷新

我將 Nginx 設定為在同一伺服器上運行的兩個 docker 容器之間的反向代理負載平衡。第一次載入頁面時,頁面會加載,但所有 css 和 js 檔案都會出現大量 404 錯誤:

頁面載入時出現 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;
        }
}

相關內容