Docker 컨테이너 간 로드 밸런싱 시 Nginx가 항상 js 및 css를 제공하지 않음 - 새로 고침 시 작동

Docker 컨테이너 간 로드 밸런싱 시 Nginx가 항상 js 및 css를 제공하지 않음 - 새로 고침 시 작동

동일한 서버에서 모두 실행되는 두 도커 컨테이너 간의 역방향 프록시 부하 분산으로 Nginx를 설정했습니다. 처음으로 페이지를 로드할 때 페이지가 로드되지만 모든 CSS 및 js 파일에 대해 많은 404 오류가 발생합니다.

페이지 로드 시 404 오류 발생

새로 고치거나 두 번째 탭을 열면 이러한 오류가 모두 사라지고 페이지가 제대로 로드됩니다. 이것을 하나의 컨테이너만 제공하도록 줄이면 비슷하게 잘 작동합니다.

처음에는 js와 css가 동일한 루트 URL에서 요청되고 단일 사용자에 대한 요청 클러스터가 두 서버 간에 균형을 이루면서 로드 밸런서와 컨테이너의 일부 측면에서 오류가 발생했기 때문이라고 생각했습니다. 약간의 실험을 통해 나는 proxy_set_header Host $host(찾아보기)여기그리고여기답변) - 내 이해는 단일 사용자의 후속 요청을 동일한 업스트림 서버로 보내야 한다는 것입니다. 이로 인해 문제가 더 드물게 발생하는 것처럼 보였지만 문제가 완전히 제거되지는 않았습니다.

내 남은 질문 (학습 아마추어의!):

  • 이것이 올바른 사용입니까 proxy_set_header? 따라서 상대적으로 사소한 요청을 두 서버에 걸쳐 로드 밸런싱하는 대신 동일한 업스트림 서버에서 단일 사용자에게 js/css를 제공하는 것이 가능합니까?
  • 두 번째 컨테이너가 첫 번째 컨테이너에 대한 페이지를 로드할 때 발생하는 일부 요청에 응답해야 하는 경우 이러한 응답이 어떻게든 정렬되지 않는 것이 문제의 원인일 가능성이 있습니까?
  • 내 사용자 기반은 단일 위치에서 원격 URL에 동시에 액세스하는 100-200명의 사용자입니다. 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;
        }
}

관련 정보