2026-08-18 14:06:04 +09:00
2026-08-15 19:58:39 +09:00
2026-08-15 19:50:54 +09:00
2026-08-15 19:50:54 +09:00
2026-08-15 19:50:54 +09:00
2026-08-15 20:02:00 +09:00
2026-08-18 14:06:04 +09:00

error-page

*.takits.me가 컨테이너 다운으로 502/503/504가 날 때, DSM 기본 에러창 대신 쓰는 공통 nginx.

DSM 리버스 프록시가 앱 포트에 직접 붙으면, 그 포트가 닫혀 있을 때 나스가 에러 페이지를 그립니다. 이 컨테이너는 항상 127.0.0.1:4098에서 떠 있고, Host로 실제 앱에 넘긴 뒤 업스트림이 죽었을 때만 공통 페이지를 보여 줍니다.

브라우저 → DSM RP (HTTPS) → 127.0.0.1:4098 (error-page)
                              └─ Host가 takits.me 이면 127.0.0.1:4889

앱의 404/500은 가로채지 않습니다.

배포

develop에서 작업한 뒤 main에 머지하면 Gitea Actions가 아래 경로로 파일을 동기화하고 컨테이너를 재생성합니다.

/volume1/09_container_manager/14_error-page

수동 실행:

cd /volume1/09_container_manager/14_error-page
docker compose up -d

별도 .env는 필요하지 않습니다. 이 서비스에는 비밀값이 없고, 수신 주소와 포트는 nginx.conf에서 127.0.0.1:4098로 고정합니다.

확인:

curl -sI http://127.0.0.1:4098/healthz
curl -sI -H "Host: unknown.takits.me" http://127.0.0.1:4098/

두 번째가 502와 커스텀 HTML이면 정상입니다.

DSM 리버스 프록시

  1. upstreams.map에 호스트 → 지금 DSM에 적어 둔 목적지 포트를 넣습니다.
  2. 해당 호스트의 리버스 프록시 목적지를 127.0.0.1:4098로 바꿉니다. (앱 포트로 두면 나스 에러창이 그대로입니다.)
  3. WebSocket이 필요한 호스트는 DSM에서 WS를 그대로 켭니다.
  4. SSL은 지금처럼 DSM이 종료합니다.

한 줄 추가 후:

docker exec error-page nginx -s reload

와일드카드 *.takits.me127.0.0.1:4098 한 규칙으로 모아도 됩니다. 맵에 없는 호스트는 공통 에러 페이지가 뜹니다.

파일

파일 역할
upstreams.map 호스트별 앱 포트
html/index.html 502/503/504 페이지
nginx.conf 프록시 + 에러 가로채기
S
Description
No description provided
Readme 44 KiB
Languages
HTML 100%