Fastly 뒤에서 일관되지 않은 로그인 상태

조금 특이한 문제가 발생했는데, 여러 요인이 복합적으로 작용하고 있는 것 같습니다.

문제:

로그인된 상태에서 포럼의 홈 페이지로 직접 이동하면, 로그인되어 있지 않은 것처럼 표시됩니다. 예를 들어, 내비게이션 바에 사용자 아바타 대신 가입/로그인 링크가 표시되요.

특정 게시물로 직접 이동하면 올바르게 로그인된 상태로 표시되고, 이후의 pushstate 전환도 정상적으로 작동합니다. 홈 페이지로 이동하는 것도 포함하죠. 하지만 홈 페이지에서 새로고침을 하면 다시 로그아웃된 것처럼 표시됩니다(위와 동일한 현상).

배경:

저는 폴링(polling) 기능만 GCP Compute Instance와 직접 통신하도록 설정하고, 나머지 모든 기능을 Fastly 뒤에 배치하여 Discourse를 사용하고 있습니다.

이 문제가 캐싱 계층과 관련이 있을 것 같다는 추측을 하고 있습니다. 다만 이 포럼에서 관련 토론을 꽤 꼼꼼히 읽어 봤습니다. Fastly의 자동 GZIP 압축은 꺼져 있는 상태입니다.

포럼은 여기이고, 위 현상을 담은 영상은 여기에 있습니다.

추가 조사 결과, 이 문제는 Cache-Control 응답 헤더가 no-cache, no-store인 경우와 Fastly가 해당 값을 무시하는 문제가 결합되어 발생한 것일 수 있다고 생각합니다.

Fastly CDN은 웹 크롤러가 no-cache, no-store 값으로 크롤링했을 가능성이 높기 때문에, 홈 페이지의 noscript 버전을 HIT로 표시하고 있었습니다.

Fastly에서는 이러한 상황에서 Expires: 0을 추가하는 것을 권장합니다.

Fastly 문서의 권고에 따라 해당 사항을 구현했습니다.