아이패드 크롬에서만 로그인이 안 돼요 — nginx, 로드밸런서, 그리고 사라진 https
"갤럭시 패드 크롬은 되고요, 아이패드 사파리도 되는데, 아이패드 크롬만 로그인이 안 돼요." 운영하다 보면 이런 신고가 제일 골치 아픕니다. 특정 브라우저, 특정 기기에서만 재현되는 버그. 코드를 아무리 들여다봐도 "브라우저마다 다르게 동작할 이유"가 안 보이거든요. 이 글은 그 신고 한 건이 사실은 nginx가 로드밸런서 뒤에서 https를 http로 떨어뜨리던 고전적인 인프라 함정이었다는 걸 추적한 기록입니다. 증상 : 관리자 대시보드에서 다른 시스템으로 넘어가는 로그인 버튼이 있는데, 이게 특정 환경에서만 실패했습니다. 아이패드 크롬 : 실패, 아이패드 사파리 : 성공 갤럭시탭 크롬 : 성공 PC: 성공 "크롬 문제다"라고 단정하기엔 갤럭시 크롬은 멀쩡합니다. "iOS 문제다"라고 하기엔 사파리는 됩니다. 딱 iOS × 크롬 교집합에서만 터집니다. 로그를 나란히 놓고 본다 증상이 아니라 데이터를 봅니다. 백엔드 referer 검증 로그를 실패/성공 케이스로 나란히 놓으니 결정적 차이가 한 줄에 드러났습니다. 아이패드 크롬 (실패): referer: http://app.example.com/ ← http, 그리고 루트 경로 허용목록: ['https://admin.example.com/', 'https://app.example.com/'] → referer 체크 후 리다이렉트 (301, 로그인 차단) 아이패드 사파리 (성공): referer: https://app.example.com/ ← https, 정상 경로 → 통과, 정상 로그인 진행 검증 코드는 단순했습니다. 허용 목록은 전부 https://로 시작합니다. 그런데 ...