public/javascript에 workbox 디렉터리가 없습니다?

안녕하세요,

포럼에서 확인되는 이상한 장애 원인을 추적하던 중, 앱 컨테이너 내의 nginx 로그도 확인해 보았습니다. 꽤 오랫동안 로그를 확인하지 않아서 이러한 오류가 더 오래전부터 있었는지는 단정할 수 없지만, 제 설치 환경에는 전혀 존재하지 않는 디렉터리에서 JavaScript 파일이 누락되었다는 오류를 확인했습니다.

"/var/www/discourse/public/javascripts/workbox/workbox-core.prod.js" 
"/var/www/discourse/public/javascripts/workbox/workbox-cacheable-response.prod.js" 
"/var/www/discourse/public/javascripts/workbox/workbox-routing.prod.js" 
"/var/www/discourse/public/javascripts/workbox/workbox-strategies.prod.js" 
"/var/www/discourse/public/javascripts/workbox/workbox-sw.js"

이것들은 몇 가지 예시일 뿐입니다. GitHub에서도 해당 파일을 찾을 수 없었으며, 이러한 문제가 발생하는 원인이 무엇인지 궁금합니다. 에러 로그가 스팸처럼 계속 쌓이지 않으면 더 마음이 편할 것 같습니다 :slight_smile:

혹시 아시는 분 계신가요?

수정: 참고로 저는 3.2.0.beta1 버전을 사용 중이며, 브라우저 콘솔에서도 해당 누락된 파일들을 확인할 수 있습니다…

Workbox는 캐싱과 관련이 있는 것 같습니다.

얼마 전에 업그레이드를 했나요? 관련 버그가 있을 수 있지만, 더 많은 정보가 필요할 것 같습니다.

게시물을 올리기 하루 전에만 업데이트했습니다.

제 조사 결과, 이 문제(워크박스)는 PWA와 관련이 있으며 Chrome/Chromium 브라우저에서 검색되는 것 같습니다.

추가로 어떤 정보가 필요하신가요?

9개월이 지났는데도 여전히 이 문제가 발생하고 있고, 관련 정보를 거의 찾지 못하겠습니다. 아무도 nginx 에러 로그를 확인하지 않는 건지, 아니면 아예 신경 쓰지 않는 건지 모르겠습니다.

이 현상이 무엇인지, 그리고 이것이 문제를 일으킬 수 있는지 없는지에 대해 아이디어가 있는 분이 계신가요?

이것과 직접적인 관련이 없어 보이는 520/429 문제를 추적하고 있는데, 이런 에러가 계속 반복되는 것이 신경 쓰입니다. 혹시 Cloudflare 문제가 남아 있어 이전 빌드의 오래된 파일을 계속 로드하려는 시도인 걸까요? 아니면 브라우저 캐시 때문일까요?

workbox가 2개월 전 종속성에서 제거되었고, 이는 최신 상태를 유지하는 사이트에는 영향을 주지 않는 문제이므로, 사이트를 업데이트할 것을 권장합니다.

3.3.0beta2를 사용 중입니다. 업데이트할 수 있는 버전이 있는 것 같지 않습니다.

@helmi 님, 당신만 그런 게 아닙니다.
저도 3.2.5에서 3.3.0으로 업그레이드할 때 문제가 많았어요(502, 429 에러가 쏟아졌죠). 결국 3.2.5로 되돌려야 했습니다.

최근에는 상황이 나아지길 바라며 3.3.1로 다시 업그레이드를 시도해 봤습니다. 어느 정도는 나아졌죠… 다만 모든 사용자에게 502 에러가 쏟아지는 수준이었을 뿐입니다.

결국 과감하게 test-passed 태그를 믿고 3.4.0.beta3-dev ( 2099c33fa7 )로 넘어갔습니다. 그리고 가끔씩 nginx 에러 로그에 다음과 같은 내용이 출력됩니다.

2024/10/08 21:44:15 [error] 79#79: *16810 open() "/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.prod.js" failed (2: No such file or directory), client: 70.79.108.71, server: _, request: "GET /assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.prod.js HTTP/2.0", host: "netgamers.it", referrer: "https://netgamers.it/service-worker.js"
2024/10/08 21:45:22 [error] 75#75: *17175 open() "/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.prod.js" failed (2: No such file or directory), client: 216.128.26.206, server: _, request: "GET /assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.prod.js HTTP/2.0", host: "netgamers.it", referrer: "https://netgamers.it/service-worker.js"
2024/10/08 21:47:50 [error] 74#74: *17968 open() "/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.prod.js" failed (2: No such file or directory), client: 77.208.167.253, server: _, request: "GET /assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-core.prod.js HTTP/2.0", host: "netgamers.it", referrer: ""
2024/10/08 21:47:51 [error] 74#74: *17981 open() "/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-cacheable-response.prod.js" failed (2: No such file or directory), client: 77.208.167.253, server: _, request: "GET /assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-cacheable-response.prod.js HTTP/2.0", host: "netgamers.it", referrer: ""
2024/10/08 21:47:51 [error] 74#74: *17982 open() "/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-sw.js" failed (2: No such file or directory), client: 77.208.167.253, server: _, request: "GET /assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-sw.js HTTP/2.0", host: "netgamers.it", referrer: ""
2024/10/08 21:47:51 [error] 74#74: *17983 open() "/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-expiration.prod.js" failed (2: No such file or directory), client: 77.208.167.253, server: _, request: "GET /assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-expiration.prod.js HTTP/2.0", host: "netgamers.it", referrer: ""
2024/10/08 21:47:51 [error] 77#77: *17984 open() "/var/www/discourse/public/assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.prod.js" failed (2: No such file or directory), client: 77.208.167.253, server: _, request: "GET /assets/workbox-9b5674ca0ecb89bae1fa6f4b09a18f12/workbox-routing.prod.js HTTP/2.0", host: "netgamers.it", referrer: ""

아직 502 에러의 원인이 무엇인지 모르겠습니다. VM은 8코어, 32GB RAM, NVMe 500GB 구성이거든요.
저희 커뮤니티에는 활성 사용자 약 450명, 주제 58.5만 개, 게시글 2,150만 개가 있어 큰 VM을 선택했습니다.

우리 설치 환경에도 같은 문제가 있는 것 같습니다. 3.2.x에서 3.3.x로 업데이트한 이후로, 게시글을 작성할 때 502 에러가 주기적으로 발생하고, 최신 게시글이 업데이트되지 않는 등 유사한 문제들이 이어지고 있습니다.

시간이 지날수록(몇 시간마다? 정확하지는 않음) 백그라운드 스크립트가 에러를 내뿜(?)면서 이러한 문제들이 발생하는 것 같습니다.

수정: 기술 담당자가 이미 이 내용을 게시한 것을 보지 못했네요 :sweat_smile: 그가 말한 내용입니다.

몇 시간마다 비슷한 오류가 반복적으로 발생합니다:

2025/05/19 16:48:10 [error] 63#63: *1738520 open() "/var/www/discourse/public/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-core.prod.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-core.prod.js HTTP/1.1", host: "XXXX"
2025/05/19 16:48:10 [error] 63#63: *1738520 open() "/var/www/discourse/public/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-routing.prod.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-routing.prod.js HTTP/1.1", host: "XXXX"
2025/05/19 16:48:10 [error] 63#63: *1738520 open() "/var/www/discourse/public/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-expiration.prod.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-expiration.prod.js HTTP/1.1", host: "XXXX"
2025/05/19 16:48:10 [error] 63#63: *1738520 open() "/var/www/discourse/public/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-sw.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-sw.js HTTP/1.1", host: "XXXX"
2025/05/19 16:48:10 [error] 63#63: *1738520 open() "/var/www/discourse/public/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-cacheable-response.prod.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-cacheable-response.prod.js HTTP/1.1", host: "XXXX"
2025/05/19 16:48:10 [error] 63#63: *1738520 open() "/var/www/discourse/public/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-strategies.prod.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/assets/workbox-77b0e3e0dd4773bcd6c7e74f302f7c69/workbox-strategies.prod.js HTTP/1.1", host: "XXXX"

이 경우 public/assets와 관련이 있지만, public/javascript에 대한 로그 항목도 있습니다:

2025/05/12 18:00:39 [error] 78023#78023: *701261 open() "/var/www/discourse/public/javascripts/workbox/workbox-sw.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/javascripts/workbox/workbox-sw.js HTTP/1.1", host: "XXXX"
2025/05/12 18:00:39 [error] 78023#78023: *701261 open() "/var/www/discourse/public/javascripts/workbox/workbox-routing.prod.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/javascripts/workbox/workbox-routing.prod.js HTTP/1.1", host: "XXXX"
2025/05/12 18:00:39 [error] 78023#78023: *701261 open() "/var/www/discourse/public/javascripts/workbox/workbox-cacheable-response.prod.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/javascripts/workbox/workbox-cacheable-response.prod.js HTTP/1.1", host: "XXXX"
2025/05/12 18:00:39 [error] 78023#78023: *701261 open() "/var/www/discourse/public/javascripts/workbox/workbox-strategies.prod.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/javascripts/workbox/workbox-strategies.prod.js HTTP/1.1", host: "XXXX"
2025/05/12 18:00:39 [error] 78023#78023: *701261 open() "/var/www/discourse/public/javascripts/workbox/workbox-core.prod.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/javascripts/workbox/workbox-core.prod.js HTTP/1.1", host: "XXXX"
2025/05/12 18:00:39 [error] 78023#78023: *701261 open() "/var/www/discourse/public/javascripts/workbox/workbox-expiration.prod.js" failed (2: No such file or directory), client: unix:, server: _, request: "GET /forum/javascripts/workbox/workbox-expiration.prod.js HTTP/1.

어떤 버전에서 경로가 변경된 것일까요? 아마 브라우저 캐시가 제대로 비워지지 않았거나, 에셋이 무효화되지 않은 경우일 것입니다. 혹은 더 가능성이 높은 것은, 한때 발견했던 리소스를 계속 스캔하는 멍청한 봇들 때문일 것입니다. 이런 로그 세트 사이에 수천 명의 방문객과 수십 명의 게시자가 있기 때문에 일반적인 문제라고 보기는 어렵습니다.

우리의 경우 컨테이너 외부의 프록시와 UNIX 소켓을 통해 액세스가 이루어지기 때문에 확인 가능한 클라이언트 IP가 없습니다. 77.208.167.253의 경우 봇인지 아닌지에 대한 관련 정보를 찾을 수 없었습니다.

어떤 버전을 사용 중이신가요?

3.5.0.beta5-dev는 더 이상 이러한 파일을 제공하지 않으며, 최신 프론트엔드에서도 이 파일들을 요청하지 않습니다. 말씀드린 대로, 이는 오래된 캐시/프론트엔드(동적 HTML 문서에서는 일반적으로 발생하지 않아야 합니다)이거나, 어쨌든 봇 또는 클라이언트 문제입니다.