haproxy 뒤에 2개 호스트를 실행하면 랜덤하게 404 오류가 발생합니다

오늘 저는 discourse 인스턴스 중 하나를 호스팅하기 위해 두 번째 서버를 추가하는 것을 시도했습니다. 컨테이너는 외부 redis, postgres, 스토리지 서버를 사용하도록 구성되어 있으며 웹 애플리케이션만 실행합니다. 지금까지 단일 서버 사이트를 HAProxy 뒤에 배치하여 문제 없이 운영해 왔습니다. HAProxy 뒤에 서버 2대를 배치하여 실행하면 nginx에서 JS 파일에 대해 404 오류가 상당히 많이 발생합니다. HAProxy에서 서버 중 하나를 제거하면 문제가 사라집니다. 404가 발생하는 파일의 URL은 동일해 보이므로, 어느 서버에서도 제공되지 않는 이유를 알 수 없습니다.

개발자 설정에 오버라이드가 없습니다. 현재 2.4.3 stable 버전을 사용 중입니다.

웹 컨테이너를 두 개 이상 실행 중이라면, 두 컨테이너 모두 정적 파일에 접근할 수 있도록 보장하는 것이 필요합니다.

가장 쉬운 방법은 업로드를 위한 객체 스토리지 사용 (S3 클론)입니다.

@Falco 안녕하세요, 답변 감사합니다. 두 서버는 NFS를 통해 공유 저장소를 사용하고 있습니다. 제 컨테이너 설정에는 다음과 같은 내용이 포함되어 있습니다.

volumes:
  - volume:
      host: {{ discourse_nas_path }}/data
      guest: /shared
  - volume:
      host: {{ discourse_nas_path }}/logs
      guest: /var/log

하지만 각 컨테이너는 assets:precompile 단계를 통해 생성된 에셋의 자체 복사본을 저장하고 있습니다. 미리 컴파일된 에셋을 공유하는 것이 필수적인가요?

Haproxy에서 백엔드를 추가하고 제거하는 것 외에 테스트를 위해 어떤 작업을 수행하셨나요?

Haproxy 설정이 랜덤 백엔드 방식을 사용하나요, 아니면 어피니티(Affinity) 방식을 사용하나요? 404 오류가 Haproxy에 기록되나요? nginx에 기록되나요? 오류가 발생하는 것이 첫 번째 백엔드인지 두 번째 백엔드인가요? 사이트에 로그인해야 하나요? 프록시 서버 뒤에서 nginx에 직접 연결했을 때 오류를 재현할 수 있나요? 요청되는 파일들이 디스크에 실제로 존재하나요? 모든 JS 파일에서 발생하는 건가요, 아니면 특정 파일에서만 발생하는 건가요?

@Falco 님의 힌트 덕분에 컨테이너 설정에 다음을 추가해 보았고, 이제 예상대로 작동합니다:

  - volume:
      host: {{ discourse_nas_path }}/assets
      guest: /var/www/discourse/public/assets